#ifndef lint
static char const 
yyrcsid[] = "$FreeBSD: src/usr.bin/yacc/skeleton.c,v 1.28 2000/01/17 02:04:06 bde Exp $";
#endif
#include <stdlib.h>
#define YYBYACC 1
#define YYMAJOR 1
#define YYMINOR 9
#define YYLEX yylex()
#define YYEMPTY -1
#define yyclearin (yychar=(YYEMPTY))
#define yyerrok (yyerrflag=0)
#define YYRECOVERING() (yyerrflag!=0)
static int yygrowstack();
#define YYPREFIX "yy"
#line 2 "start.y"
#include"relipmoC.h"
#include"floatstack.h"
#include<stack>
using namespace std;
#define YYSTACKSIZE 20000
/* change the prototype for "yyparse" */
#define YYPARSE_PARAM
#define YYPARSE_PARAM_TYPE LabelTab &curLabelTab, BlockTab &curBlockTab

extern bool VERBOSE;
extern StringTab curStringTab;
extern SymTab curSymTab;
extern FuncTab curFuncTab;

SYMTYPE opcode;
extern int yylex( void );
extern int yylineno;               /*line number from start.l*/

FloatStack floatStack;

static string curName;
static string curInstr;
static string cmpOp1, cmpOp2; /*comparison type*/
static bool SAW_JUMP;
static BasicBlock *curBlock;
static bool isStatic = false;
ActRecord *curActRecord;	/*to be shared with yylex( )*/
static bool seenOnce;
static stack< SymInfo > prototype;
const string &EAX = "%eax";
const string &EDX = "%edx";

Array tempArray;
const string indexForm( const SymInfo &array, const SymInfo &regs )
{
	return array.getName( ) + "[" + regs.getValue( ) + "]";
}

#line 42 "start.y"
typedef union {
	char name[ 100 ];
	int num;
	SYMTYPE type;
} YYSTYPE;
#line 62 "yacc.cpp"
#define YYERRCODE 256
#define NAME 257
#define ADDRESSNAME 258
#define STATICNAME 259
#define STACKVAR 260
#define POINTER 261
#define ARRAYNAME 262
#define REGSL 263
#define REGSW 264
#define REGSB 265
#define REGS 266
#define ESP 267
#define EBP 268
#define PTRESP 269
#define FLOATREG 270
#define CJMP 271
#define CSET 272
#define JMP 273
#define STRINGLABEL 274
#define STR 275
#define STRSECTION 276
#define DTYPE 277
#define NUM 278
#define LABEL 279
#define HEXNUM 280
#define GLOBAL 281
#define TYPE 282
#define SIZE 283
#define ZERO 284
#define LOCAL 285
#define END 286
#define COMM 287
#define OBJECT 288
#define FUNCTION 289
#define FUNCEND 290
#define FADDS 291
#define FADDL 292
#define FADD 293
#define FADDP 294
#define FIADDS 295
#define FIADDL 296
#define FIADD 297
#define FSUBS 298
#define FSUBL 299
#define FSUB 300
#define FSUBP 301
#define FSUBRS 302
#define FSUBRL 303
#define FSUBR 304
#define FSUBRP 305
#define MULL 306
#define IMULL 307
#define MULB 308
#define FMUL 309
#define FMULP 310
#define IDIVL 311
#define DIVL 312
#define FDIVL 313
#define FDIVS 314
#define FDIV 315
#define FDIVP 316
#define FDIVR 317
#define FDIVRP 318
#define INC 319
#define DEC 320
#define FABS 321
#define FCHS 322
#define TEST 323
#define NOT 324
#define NEG 325
#define PUSHL 326
#define POPL 327
#define MOVZBL 328
#define MOVSBL 329
#define MOVSBW 330
#define MOVSWL 331
#define MOVBL 332
#define MOVBW 333
#define MOVWL 334
#define MOV 335
#define FSTS 336
#define FSTTL 337
#define FST 338
#define FSTPS 339
#define FSTPL 340
#define FSTP 341
#define FISTPS 342
#define FISTPL 343
#define FISTPLL 344
#define FISTP 345
#define FISTS 346
#define FISTL 347
#define FIST 348
#define FLDS 349
#define FLD 350
#define FILDL 351
#define FILDS 352
#define FILD 353
#define FLD1 354
#define FLDZ 355
#define FXCH 356
#define CMP 357
#define FNSTSW 358
#define FUCOMPP 359
#define FNSTCW 360
#define FLDCW 361
#define OPCODE 362
#define CALL 363
#define LEAL 364
#define SUM 365
#define LOW 366
const short yylhs[] = {                                        -1,
    2,    0,    3,    0,    4,    0,    5,    0,    6,    0,
    7,    0,    8,    0,    0,    1,    1,   12,    9,   14,
    9,   15,   11,   16,   13,   13,   18,   10,   19,   17,
   20,   17,   21,   17,   22,   17,   23,   17,   24,   17,
   25,   17,   26,   17,   27,   17,   28,   17,   29,   17,
   30,   17,   31,   17,   32,   17,   33,   17,   34,   17,
   35,   17,   36,   17,   37,   17,   38,   17,   39,   17,
   40,   17,   41,   17,   42,   17,   43,   17,   44,   17,
   45,   17,   46,   17,   47,   17,   48,   17,   49,   17,
   50,   17,   51,   17,   52,   17,   53,   17,   54,   17,
   55,   17,   56,   17,   57,   17,   58,   17,   59,   17,
   60,   17,   61,   17,   62,   17,   63,   17,   64,   17,
   65,   17,   66,   17,   67,   17,   68,   17,   69,   17,
   70,   17,   71,   17,   72,   17,   73,   17,   74,   17,
   75,   17,   76,   17,   77,   17,   78,   17,   79,   17,
   80,   17,   81,   17,   82,   17,   83,   17,   84,   17,
   85,   17,   86,   17,   87,   17,   88,   17,   89,   17,
   90,   17,   91,   17,   92,   17,   93,   17,   94,   17,
   95,   17,   96,   17,   97,   17,   98,   17,   99,   17,
  100,   17,  101,   17,  102,   17,  103,   17,  104,   17,
  105,   17,  106,   17,  107,   17,  108,   17,  109,   17,
  110,   17,  111,   17,  112,   17,  113,   17,  114,   17,
  115,   17,  116,   17,  117,   17,  118,   17,  119,   17,
  120,   17,  121,   17,  122,   17,  123,   17,  124,   17,
  125,   17,  126,   17,  127,   17,   17,   17,  128,   17,
  129,   17,  130,   17,  131,   17,  132,   17,  133,   17,
  134,   17,  135,   17,  136,   17,  137,   17,  138,   17,
  139,   17,  140,   17,  141,   17,  142,   17,  143,   17,
  144,   17,  145,   17,  146,   17,  147,   17,  148,   17,
  149,   17,  150,   17,  151,   17,  152,   17,  153,   17,
  154,   17,  155,   17,  156,   17,  157,   17,  158,   17,
  159,   17,  160,   17,  161,   17,  162,   17,  163,   17,
  164,   17,  165,   17,  166,   17,  167,   17,  168,   17,
  169,   17,  170,   17,  171,   17,  172,   17,  173,   17,
  174,   17,  175,   17,  176,   17,  177,   17,  178,   17,
  179,   17,  180,   17,  181,   17,  182,   17,  183,   17,
   17,   17,   17,  186,   17,  187,   17,  188,   17,  189,
   17,  190,   17,  191,   17,  192,   17,  193,   17,  194,
   17,  195,   17,  196,   17,  197,   17,  198,   17,  199,
   17,  200,   17,   17,  185,  185,  185,  184,  184,
};
const short yylen[] = {                                         2,
    0,    4,    0,    2,    0,    6,    0,    6,    0,    4,
    0,    6,    0,    7,    1,    4,    4,    0,    5,    0,
    4,    0,    4,    0,    4,    1,    0,    4,    0,    4,
    0,    4,    0,    4,    0,    4,    0,    4,    0,    4,
    0,    4,    0,    4,    0,    4,    0,    5,    0,    4,
    0,    4,    0,    4,    0,    4,    0,    4,    0,    5,
    0,    4,    0,    4,    0,    4,    0,    4,    0,    4,
    0,    4,    0,    4,    0,    4,    0,    4,    0,    4,
    0,    4,    0,    5,    0,    5,    0,    5,    0,    5,
    0,    5,    0,    5,    0,    5,    0,    5,    0,    5,
    0,    5,    0,    5,    0,    5,    0,    5,    0,    5,
    0,    5,    0,    6,    0,    4,    0,    4,    0,    4,
    0,    4,    0,    4,    0,    4,    0,    4,    0,    4,
    0,    4,    0,    5,    0,    5,    0,    5,    0,    5,
    0,    5,    0,    4,    0,    4,    0,    4,    0,    5,
    0,    5,    0,    5,    0,    5,    0,    5,    0,    5,
    0,    5,    0,    5,    0,    5,    0,    5,    0,    5,
    0,    5,    0,    5,    0,    5,    0,    5,    0,    5,
    0,    5,    0,    5,    0,    5,    0,    5,    0,    5,
    0,    5,    0,    5,    0,    5,    0,    5,    0,    5,
    0,    5,    0,    5,    0,    5,    0,    5,    0,    5,
    0,    5,    0,    5,    0,    5,    0,    5,    0,    5,
    0,    5,    0,    5,    0,    5,    0,    5,    0,    5,
    0,    5,    0,    5,    0,    5,    0,    5,    0,    5,
    0,    5,    0,    5,    0,    5,    3,    3,    0,    3,
    0,    3,    0,    3,    0,    4,    0,    3,    0,    3,
    0,    4,    0,    4,    0,    4,    0,    4,    0,    4,
    0,    4,    0,    4,    0,    4,    0,    4,    0,    4,
    0,    4,    0,    4,    0,    4,    0,    4,    0,    4,
    0,    4,    0,    4,    0,    5,    0,    4,    0,    4,
    0,    5,    0,    4,    0,    4,    0,    4,    0,    5,
    0,    4,    0,    4,    0,    5,    0,    4,    0,    4,
    0,    4,    0,    5,    0,    4,    0,    4,    0,    4,
    0,    5,    0,    5,    0,    4,    0,    5,    0,    4,
    0,    4,    0,    4,    0,    4,    0,    4,    0,    5,
    0,    5,    0,    3,    0,    7,    0,   10,    0,   10,
   13,    6,    3,    0,    4,    0,    4,    0,    4,    0,
    4,    0,    4,    0,    4,    0,    8,    0,    6,    0,
    5,    0,    5,    0,    5,    0,    6,    0,    5,    0,
    4,    0,    4,    1,    2,    2,    2,    5,    0,
};
const short yydefred[] = {                                      0,
    0,    0,    0,   15,    0,    0,    0,    0,    1,    9,
    0,    0,    4,    0,    0,    0,    0,    0,    0,    5,
    7,    2,   10,    0,    0,    0,    0,    0,   13,    0,
    0,    0,   16,    0,   17,    6,    8,    0,   12,   20,
    0,   27,   14,    0,   18,    0,    0,   26,   21,    0,
    0,    0,    0,    0,  394,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,  249,  251,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,  257,  259,    0,    0,    0,  353,    0,    0,    0,
    0,    0,   28,   24,    0,   19,   33,   37,   35,   31,
   29,  297,  299,    0,    0,  303,  305,  311,  313,    0,
    0,  319,  321,  317,    0,    0,    0,    0,    0,    0,
  143,  147,  145,  325,  327,    0,    0,  115,  119,  117,
  121,  123,  127,  125,  129,  339,  341,    0,    0,  343,
  345,  347,    0,   41,   43,   45,    0,   39,   53,   55,
   57,    0,   51,    0,    0,    0,    0,    0,    0,    0,
   75,   77,   81,   79,   73,   65,   67,   71,   69,   63,
  366,  368,  370,  364,    0,  372,  374,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,  275,  277,  273,  281,  283,
  390,  279,  289,  291,  285,  287,  261,  263,  265,  267,
  269,  271,    0,    0,    0,  255,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,  392,    0,    0,    0,    0,    0,   22,
    0,    0,    0,    0,    0,    0,    0,  295,    0,  301,
    0,    0,    0,    0,  309,    0,  315,    0,    0,    0,
  323,  135,  137,  139,  133,    0,  141,    0,    0,    0,
    0,    0,  331,    0,  333,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,  337,    0,  349,    0,    0,
    0,  351,    0,    0,    0,   47,    0,    0,    0,    0,
    0,   59,    0,    0,  250,  252,  227,  233,  229,  235,
  231,  223,  225,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,  363,    0,    0,
  248,  247,  189,  191,  187,  177,  179,  175,  183,  185,
  181,  157,  159,  171,  151,  153,  155,  169,  149,  237,
  239,  241,  163,  165,  167,  161,  173,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,  258,  260,    0,  254,  201,
  213,  203,  215,  205,  217,  195,  197,  199,  193,  221,
  207,  209,  211,  219,    0,    0,  354,    0,    0,    0,
    0,   87,   97,  101,  107,   93,   85,   99,  105,   91,
   83,  243,    0,  103,  109,   95,  111,  245,    0,  384,
  382,  388,    0,  386,  380,   25,    0,   34,   38,   36,
   32,   30,  298,  300,    0,  294,    0,  304,  306,  312,
  314,    0,  308,    0,  320,  322,  318,    0,    0,    0,
    0,    0,  132,    0,  144,  148,  146,  326,  328,    0,
  330,    0,  116,  120,  118,  122,  124,  128,  126,  130,
  340,  342,    0,  336,    0,  344,  346,  348,    0,   42,
   44,   46,    0,   50,   40,   54,   56,   58,    0,   62,
   52,    0,    0,    0,    0,    0,    0,    0,   76,   78,
   82,   80,   74,   66,   68,   72,   70,   64,  367,  369,
  371,  365,  373,  375,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,  276,
  278,  274,  282,  284,  391,  280,  290,  292,  286,  288,
  262,  264,  266,  268,  270,  272,    0,  256,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,  397,  396,  395,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,  113,    0,    0,    0,    0,    0,    0,  393,    0,
    0,    0,  378,    0,    0,   23,  296,  302,  310,  316,
  324,  136,  138,  140,  134,  142,  332,  334,  338,  350,
  352,   48,   60,  228,  234,  230,  236,  232,  224,  226,
  190,  192,  188,  178,  180,  176,  184,  186,  182,  158,
  160,  172,  152,  154,  156,  170,  150,  238,  240,  242,
  164,  166,  168,  162,  174,    0,  202,  214,  204,  216,
  206,  218,  196,  198,  200,  194,  222,  208,  210,  212,
  220,  355,    0,    0,    0,   88,   98,  102,  108,   94,
   86,  100,  106,   92,   84,  244,    0,   90,  104,  110,
   96,  112,  246,  385,  383,  389,    0,    0,  381,  376,
    0,    0,    0,    0,  362,  114,  379,  387,    0,  356,
    0,    0,    0,  377,  359,  357,    0,    0,    0,    0,
  360,  358,    0,    0,    0,    0,    0,  361,    0,    0,
  398,
};
const short yydgoto[] = {                                      48,
   13,   16,    7,   27,   28,   17,   30,   38,   33,   35,
  106,   50,   49,   44,  437,  249,  103,   46,  255,  254,
  251,  253,  252,  308,  303,  304,  305,  493,  307,  314,
  309,  310,  311,  499,  313,  333,  329,  330,  332,  331,
  328,  324,  325,  327,  326,  600,  596,  591,  603,  599,
  595,  606,  592,  597,  593,  604,  598,  594,  605,  607,
  697,  286,  288,  287,  289,  290,  292,  291,  293,  276,
  462,  459,  460,  461,  464,  278,  280,  279,  541,  537,
  538,  539,  534,  535,  548,  545,  546,  547,  540,  536,
  549,  530,  528,  529,  533,  531,  532,  527,  525,  526,
  578,  575,  576,  577,  569,  571,  573,  580,  581,  582,
  570,  572,  574,  583,  579,  507,  508,  502,  504,  506,
  503,  505,  542,  543,  544,  601,  608,  164,  165,  227,
  388,  224,  225,  379,  380,  381,  382,  383,  384,  370,
  368,  369,  374,  371,  372,  377,  378,  375,  376,  259,
  445,  256,  257,  447,  261,  262,  266,  452,  263,  264,
  454,  270,  268,  269,  458,  281,  282,  284,  470,  472,
  297,  483,  294,  295,  299,  300,  301,  485,  489,  234,
  711,  729,  728,  736,  411,  337,  334,  335,  336,  339,
  340,  719,  707,  615,  611,  610,  614,  612,  373,  429,
};
const short yysindex[] = {                                    -53,
  -49, -174, -154,    0, -150,    0, -173, -122,    0,    0,
 -159, -125,    0, -137, -100, -173,  -53,  -98,  -90,    0,
    0,    0,    0,  -92, -270,  -12,  -53,  -53,    0,  -53,
  189,    9,    0,  213,    0,    0,    0,  -53,    0,    0,
   -6,    0,    0,  -93,    0,  266,   -2,    0,    0,   20,
   14, -156,   22,  241,    0, -204,   33, -238, -149,   34,
  -34,   35, -182, -210,  -22,   39,  -11,   58,  -20,   43,
  -18,   44,   18,   25,    0,    0,  -83,   50,   66, -220,
    4, -246,  129,  130, -250,  -16, -198, -203, -101, -225,
 -242,    0,    0,   47,  -75,   36,    0,   62,   70, -193,
   74, -252,    0,    0,  275,    0,    0,    0,    0,    0,
    0,    0,    0,   64,   67,    0,    0,    0,    0,   77,
   82,    0,    0,    0,   83,   90,   91,   92,   93,   94,
    0,    0,    0,    0,    0,  118,  121,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,  122,  123,    0,
    0,    0,  124,    0,    0,    0,  119,    0,    0,    0,
    0,  120,    0,  266,  266, -237, -235,  133,  134,  135,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,  266,    0,    0,  266,  266,  136,
  137,  138,  154,  155,  156,  157,  158,  159,  160,  172,
  179, -109, -189,   88,   76,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,   85,  266,  266,    0,  266, -227, -192, -184,
  -35,   89, -320,  266,  115, -115,  186,  187,  188,  190,
  191,   -4,    7,    0,  192,   -7, -127,  193,  -93,    0,
  266,  266,  266,  266,  266,  266,  266,    0,  266,    0,
  266,  266,  266,  266,    0,  266,    0,  266,  266,  266,
    0,    0,    0,    0,    0,  266,    0,  266,  266,  266,
  266,  266,    0,  266,    0,  266,  266,  266,  266,  266,
  266,  266,  266,  266,  266,    0,  266,    0,  266,  266,
  266,    0,  266,  266,  266,    0,  266,  266,  266,  266,
  266,    0,  266,  266,    0,    0,    0,    0,    0,    0,
    0,    0,    0,  266,  266,  266,  266,  266,  266,  266,
  266,  266,  266,  266,  266,  266,  266,    0,  266,  266,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,  266,  266,  266,
  266,  266,  266,  266,  266,  266,  266,  266,  266,  266,
  266,  266,  266,  266,  177,    0,    0,  266,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,  182,  183,    0,  202,  203,   32,
  103,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,  194,    0,    0,    0,    0,    0,  266,    0,
    0,    0,  199,    0,    0,    0,  -93,    0,    0,    0,
    0,    0,    0,    0,  266,    0,  266,    0,    0,    0,
    0,  266,    0,  266,    0,    0,    0,  266,  266,  266,
  266,  266,    0,  266,    0,    0,    0,    0,    0,  266,
    0,  266,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,  266,    0,  266,    0,    0,    0,  266,    0,
    0,    0,  266,    0,    0,    0,    0,    0,  266,    0,
    0,  266,  266,  266,  266,  266,  266,  266,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,  266,  266,  266,  266,  266,  266,
  266,  266,  266,  266,  266,  266,  266,  266,  266,  266,
  266,  266,  266,  266,  266,  266,  266,  266,  266,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,  197,    0,  266,  266,
  266,  266,  266,  266,  266,  266,  266,  266,  266,  266,
  266,  266,  266,  201,  204,  205,    0,    0,    0,  208,
  266,  266,  266,  266,  266,  266,  266,  266,  266,  266,
  266,    0,  266,  266,  266,  266,  266,  266,    0,  266,
  266,  266,    0,  206,  266,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,  207,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0, -281,  140,  266,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,  266,    0,    0,    0,
    0,    0,    0,    0,    0,    0,  266,  266,    0,    0,
  266,  198,  200,  209,    0,    0,    0,    0,  266,    0,
  211,  214,  215,    0,    0,    0,  144,  266,  266,  216,
    0,    0,  223,  108,  224,  266, -115,    0,  125,  225,
    0,
};
const short yyrindex[] = {                                    210,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,  210,    0,    0,    0,
    0,    0,    0,  -85,    0,    0,  210,  210,    0,  210,
    0,    0,    0,    0,    0,    0,    0,  210,    0,    0,
    0,    0,    0,  210,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,  360,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,  454,    0,    0,    0,    0,    0,  548,
    0,    0,    0,    0,    0,    0,    0,    0,  642,    0,
    0,    0,    0,    0,    0,  736,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,  830,    0,    0,
    0,    0,    0,    0,    0,    0,  924,    0,    0,    0,
    0, 1018,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,  210,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0, 1112,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,  210,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0, 1206,    0,    0,    0,    0,    0,    0,
    0,
};
const short yygindex[] = {                                      6,
  472,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0, -247,    0,    0,    0, -164,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0, -248,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
};
#define YYTABLESIZE 1570
const short yytable[] = {                                     315,
  316,  436,  405,   31,  245,    6,  199,  246,    8,  200,
  190,  201,   32,  191,  221,  202,  203,  222,  116,  192,
  338,  117,   23,  341,  342,  247,  223,  204,  317,  205,
  319,  217,   36,   37,  218,   39,  181,  182,  390,  183,
  318,  406,  320,   43,  219,  184,  131,  185,  220,  132,
  391,  133,  112,  213,  186,  113,  214,  187,  209,  386,
  387,  210,  389,  237,  238,  114,  239,  240,  241,  407,
  211,  212,  242,  392,  126,  712,  361,  127,  362,  128,
  713,  394,    9,  129,  243,  393,  438,  439,  440,  441,
  442,  443,  444,  395,  446,  130,  448,  449,  450,  451,
  108,  453,   10,  455,  456,  457,   11,  118,   12,  109,
  119,  463,  248,  465,  466,  467,  468,  469,   18,  471,
  120,  473,  474,  475,  476,  477,  478,  479,  480,  481,
  482,   19,  484,  433,  486,  487,  488,   20,  490,  491,
  492,  434,  494,  495,  496,  497,  498,  355,  500,  501,
  356,  357,  358,   14,   15,  215,  359,  360,  216,  509,
  510,  511,  512,  513,  514,  515,  516,  517,  518,  519,
  520,  521,  522,  166,  523,  524,  167,   21,  168,   24,
    1,  228,  169,   47,  229,   29,  230,    2,   11,  616,
  231,    3,    4,    5,  170,   11,   11,   25,   26,   11,
   11,   11,  232,  550,  551,  552,  553,  554,  555,  556,
  557,  558,  559,  560,  561,  562,  563,  564,  565,  566,
    1,  396,  122,  568,  397,  123,  398,    2,  409,  410,
  399,    3,    4,    5,  134,  124,  146,  135,  150,  147,
  206,  151,  400,  207,   34,  138,   40,  136,  139,  148,
  140,  152,  417,  208,  141,  418,  419,  420,  431,  432,
  188,  421,  422,  423,  609,   41,  424,  425,  426,  189,
   42,   45,  427,  428,  154,  104,  105,  155,  156,  157,
  617,  159,  618,  158,  160,  161,  162,  619,  588,  620,
  163,  589,  107,  621,  622,  623,  624,  625,  111,  626,
  110,  233,  115,  121,  125,  627,  171,  628,  137,  172,
  173,  174,  149,  153,  142,  175,  226,  143,  629,  144,
  630,  235,  176,  145,  631,  177,  178,  179,  632,  236,
  244,  180,  250,  258,  633,  367,  260,  634,  635,  636,
  637,  638,  639,  640,  363,  401,  265,  364,  402,  365,
  403,  267,  271,  366,  404,  272,  273,  274,  275,  277,
  641,  642,  643,  644,  645,  646,  647,  648,  649,  650,
  651,  652,  653,  654,  655,  656,  657,  658,  659,  660,
  661,  662,  663,  664,  665,  193,  196,  283,  194,  197,
  285,  296,  298,  302,  195,  198,  306,  312,  321,  322,
  323,  343,  344,  345,  667,  668,  669,  670,  671,  672,
  673,  674,  675,  676,  677,  678,  679,  680,  681,  346,
  347,  348,  349,  350,  351,  352,  686,  687,  688,  689,
  690,  691,  692,  693,  694,  695,  696,  353,  698,  699,
  700,  701,  702,  703,  354,  704,  705,  706,  385,  408,
  709,  412,  413,  414,  567,  415,  416,  430,  435,  584,
  585,  586,  587,  590,  613,  666,  682,  685,  735,  683,
  684,  602,  708,  710,  714,  721,  725,  722,  730,  726,
  727,  733,  734,  737,  741,  740,  723,   22,  739,    0,
    0,    3,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  715,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,  716,    0,    0,    0,   51,   52,   53,    0,
    0,    0,  717,  718,   54,    0,  720,    0,    0,    0,
    0,    0,    0,    0,  724,   55,    0,    0,   56,   57,
    0,    0,   58,  731,  732,   59,   60,    0,    0,   61,
   62,  738,   63,   64,   65,   66,   67,   68,    0,    0,
   69,   70,   71,   72,   73,   74,   75,   76,   77,   78,
   79,   80,   81,    0,    0,    0,    0,   82,   83,   84,
   85,    0,    0,   86,    0,    0,   87,    0,    0,    0,
   88,    0,    0,   89,    0,   90,    0,    0,   91,   92,
   93,   94,   95,   96,   97,   98,   99,  100,  101,  102,
  253,  253,  253,    0,    0,    0,    0,    0,  253,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,  253,
    0,    0,  253,  253,    0,    0,  253,    0,    0,  253,
  253,    0,    0,  253,  253,    0,  253,  253,  253,  253,
  253,  253,    0,    0,  253,  253,  253,  253,  253,  253,
  253,  253,  253,  253,  253,  253,  253,    0,    0,    0,
    0,  253,  253,  253,  253,    0,    0,  253,    0,    0,
  253,    0,    0,    0,  253,    0,    0,  253,    0,  253,
    0,    0,  253,  253,  253,  253,  253,  253,  253,  253,
  253,  253,  253,  253,  293,  293,  293,    0,    0,    0,
    0,    0,  293,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,  293,    0,    0,  293,  293,    0,    0,
  293,    0,    0,  293,  293,    0,    0,  293,  293,    0,
  293,  293,  293,  293,  293,  293,    0,    0,  293,  293,
  293,  293,  293,  293,  293,  293,  293,  293,  293,  293,
  293,    0,    0,    0,    0,  293,  293,  293,  293,    0,
    0,  293,    0,    0,  293,    0,    0,    0,  293,    0,
    0,  293,    0,  293,    0,    0,  293,  293,  293,  293,
  293,  293,  293,  293,  293,  293,  293,  293,  307,  307,
  307,    0,    0,    0,    0,    0,  307,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,  307,    0,    0,
  307,  307,    0,    0,  307,    0,    0,  307,  307,    0,
    0,  307,  307,    0,  307,  307,  307,  307,  307,  307,
    0,    0,  307,  307,  307,  307,  307,  307,  307,  307,
  307,  307,  307,  307,  307,    0,    0,    0,    0,  307,
  307,  307,  307,    0,    0,  307,    0,    0,  307,    0,
    0,    0,  307,    0,    0,  307,    0,  307,    0,    0,
  307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
  307,  307,  131,  131,  131,    0,    0,    0,    0,    0,
  131,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,  131,    0,    0,  131,  131,    0,    0,  131,    0,
    0,  131,  131,    0,    0,  131,  131,    0,  131,  131,
  131,  131,  131,  131,    0,    0,  131,  131,  131,  131,
  131,  131,  131,  131,  131,  131,  131,  131,  131,    0,
    0,    0,    0,  131,  131,  131,  131,    0,    0,  131,
    0,    0,  131,    0,    0,    0,  131,    0,    0,  131,
    0,  131,    0,    0,  131,  131,  131,  131,  131,  131,
  131,  131,  131,  131,  131,  131,  329,  329,  329,    0,
    0,    0,    0,    0,  329,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,  329,    0,    0,  329,  329,
    0,    0,  329,    0,    0,  329,  329,    0,    0,  329,
  329,    0,  329,  329,  329,  329,  329,  329,    0,    0,
  329,  329,  329,  329,  329,  329,  329,  329,  329,  329,
  329,  329,  329,    0,    0,    0,    0,  329,  329,  329,
  329,    0,    0,  329,    0,    0,  329,    0,    0,    0,
  329,    0,    0,  329,    0,  329,    0,    0,  329,  329,
  329,  329,  329,  329,  329,  329,  329,  329,  329,  329,
  335,  335,  335,    0,    0,    0,    0,    0,  335,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,  335,
    0,    0,  335,  335,    0,    0,  335,    0,    0,  335,
  335,    0,    0,  335,  335,    0,  335,  335,  335,  335,
  335,  335,    0,    0,  335,  335,  335,  335,  335,  335,
  335,  335,  335,  335,  335,  335,  335,    0,    0,    0,
    0,  335,  335,  335,  335,    0,    0,  335,    0,    0,
  335,    0,    0,    0,  335,    0,    0,  335,    0,  335,
    0,    0,  335,  335,  335,  335,  335,  335,  335,  335,
  335,  335,  335,  335,   49,   49,   49,    0,    0,    0,
    0,    0,   49,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,   49,    0,    0,   49,   49,    0,    0,
   49,    0,    0,   49,   49,    0,    0,   49,   49,    0,
   49,   49,   49,   49,   49,   49,    0,    0,   49,   49,
   49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
   49,    0,    0,    0,    0,   49,   49,   49,   49,    0,
    0,   49,    0,    0,   49,    0,    0,    0,   49,    0,
    0,   49,    0,   49,    0,    0,   49,   49,   49,   49,
   49,   49,   49,   49,   49,   49,   49,   49,   61,   61,
   61,    0,    0,    0,    0,    0,   61,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,   61,    0,    0,
   61,   61,    0,    0,   61,    0,    0,   61,   61,    0,
    0,   61,   61,    0,   61,   61,   61,   61,   61,   61,
    0,    0,   61,   61,   61,   61,   61,   61,   61,   61,
   61,   61,   61,   61,   61,    0,    0,    0,    0,   61,
   61,   61,   61,    0,    0,   61,    0,    0,   61,    0,
    0,    0,   61,    0,    0,   61,    0,   61,    0,    0,
   61,   61,   61,   61,   61,   61,   61,   61,   61,   61,
   61,   61,   89,   89,   89,    0,    0,    0,    0,    0,
   89,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,   89,    0,    0,   89,   89,    0,    0,   89,    0,
    0,   89,   89,    0,    0,   89,   89,    0,   89,   89,
   89,   89,   89,   89,    0,    0,   89,   89,   89,   89,
   89,   89,   89,   89,   89,   89,   89,   89,   89,    0,
    0,    0,    0,   89,   89,   89,   89,    0,    0,   89,
    0,    0,   89,    0,    0,    0,   89,    0,    0,   89,
    0,   89,    0,    0,   89,   89,   89,   89,   89,   89,
   89,   89,   89,   89,   89,   89,  399,  399,  399,    0,
    0,    0,    0,    0,  399,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,  399,    0,    0,  399,  399,
    0,    0,  399,    0,    0,  399,  399,    0,    0,  399,
  399,    0,  399,  399,  399,  399,  399,  399,    0,    0,
  399,  399,  399,  399,  399,  399,  399,  399,  399,  399,
  399,  399,  399,    0,    0,    0,    0,  399,  399,  399,
  399,    0,    0,  399,    0,    0,  399,    0,    0,    0,
  399,    0,    0,  399,    0,  399,    0,    0,  399,  399,
  399,  399,  399,  399,  399,  399,    0,  399,  399,  399,
};
const short yycheck[] = {                                     164,
  165,  249,  323,  274,  257,    0,  257,  260,   58,  260,
  257,  262,  283,  260,  257,  266,  267,  260,  257,  266,
  185,  260,   17,  188,  189,  278,  269,  278,  266,  280,
  266,  257,   27,   28,  260,   30,  257,  258,  266,  260,
  278,  362,  278,   38,  270,  266,  257,  268,  274,  260,
  278,  262,  257,  257,  275,  260,  260,  278,  257,  224,
  225,  260,  227,  257,  258,  270,  260,  261,  262,  234,
  269,  270,  266,  266,  257,  357,  266,  260,  268,  262,
  362,  266,  257,  266,  278,  278,  251,  252,  253,  254,
  255,  256,  257,  278,  259,  278,  261,  262,  263,  264,
  257,  266,  257,  268,  269,  270,  257,  257,  282,  266,
  260,  276,  365,  278,  279,  280,  281,  282,  278,  284,
  270,  286,  287,  288,  289,  290,  291,  292,  293,  294,
  295,  257,  297,  261,  299,  300,  301,  275,  303,  304,
  305,  269,  307,  308,  309,  310,  311,  257,  313,  314,
  260,  261,  262,  276,  277,  257,  266,  267,  260,  324,
  325,  326,  327,  328,  329,  330,  331,  332,  333,  334,
  335,  336,  337,  257,  339,  340,  260,  278,  262,  278,
  274,  257,  266,  277,  260,  278,  262,  281,  274,  437,
  266,  285,  286,  287,  278,  281,  282,  288,  289,  285,
  286,  287,  278,  368,  369,  370,  371,  372,  373,  374,
  375,  376,  377,  378,  379,  380,  381,  382,  383,  384,
  274,  257,  257,  388,  260,  260,  262,  281,  344,  345,
  266,  285,  286,  287,  257,  270,  257,  260,  257,  260,
  257,  260,  278,  260,  257,  257,   58,  270,  260,  270,
  262,  270,  257,  270,  266,  260,  261,  262,  266,  267,
  257,  266,  267,  257,  429,  257,  260,  261,  262,  266,
   58,  278,  266,  267,  257,  278,  257,  260,  261,  262,
  445,  257,  447,  266,  260,  261,  262,  452,  257,  454,
  266,  260,  279,  458,  459,  460,  461,  462,   58,  464,
  279,  266,  270,  270,  270,  470,  257,  472,  270,  260,
  261,  262,  270,  270,  257,  266,  270,  260,  483,  262,
  485,  260,  257,  266,  489,  260,  261,  262,  493,  260,
  257,  266,   58,  270,  499,  260,  270,  502,  503,  504,
  505,  506,  507,  508,  257,  257,  270,  260,  260,  262,
  262,  270,  270,  266,  266,  266,  266,  266,  266,  266,
  525,  526,  527,  528,  529,  530,  531,  532,  533,  534,
  535,  536,  537,  538,  539,  540,  541,  542,  543,  544,
  545,  546,  547,  548,  549,  257,  257,  270,  260,  260,
  270,  270,  270,  270,  266,  266,  278,  278,  266,  266,
  266,  266,  266,  266,  569,  570,  571,  572,  573,  574,
  575,  576,  577,  578,  579,  580,  581,  582,  583,  266,
  266,  266,  266,  266,  266,  266,  591,  592,  593,  594,
  595,  596,  597,  598,  599,  600,  601,  266,  603,  604,
  605,  606,  607,  608,  266,  610,  611,  612,  364,  335,
  615,  266,  266,  266,  278,  266,  266,  266,  266,  278,
  278,  260,  260,  361,  266,  269,  266,  260,  361,  266,
  266,  278,  267,  267,  335,  278,  266,  278,  335,  266,
  266,  266,  260,  260,  260,  361,  278,   16,  737,   -1,
   -1,  282,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  685,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,  697,   -1,   -1,   -1,  271,  272,  273,   -1,
   -1,   -1,  707,  708,  279,   -1,  711,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,  719,  290,   -1,   -1,  293,  294,
   -1,   -1,  297,  728,  729,  300,  301,   -1,   -1,  304,
  305,  736,  307,  308,  309,  310,  311,  312,   -1,   -1,
  315,  316,  317,  318,  319,  320,  321,  322,  323,  324,
  325,  326,  327,   -1,   -1,   -1,   -1,  332,  333,  334,
  335,   -1,   -1,  338,   -1,   -1,  341,   -1,   -1,   -1,
  345,   -1,   -1,  348,   -1,  350,   -1,   -1,  353,  354,
  355,  356,  357,  358,  359,  360,  361,  362,  363,  364,
  271,  272,  273,   -1,   -1,   -1,   -1,   -1,  279,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  290,
   -1,   -1,  293,  294,   -1,   -1,  297,   -1,   -1,  300,
  301,   -1,   -1,  304,  305,   -1,  307,  308,  309,  310,
  311,  312,   -1,   -1,  315,  316,  317,  318,  319,  320,
  321,  322,  323,  324,  325,  326,  327,   -1,   -1,   -1,
   -1,  332,  333,  334,  335,   -1,   -1,  338,   -1,   -1,
  341,   -1,   -1,   -1,  345,   -1,   -1,  348,   -1,  350,
   -1,   -1,  353,  354,  355,  356,  357,  358,  359,  360,
  361,  362,  363,  364,  271,  272,  273,   -1,   -1,   -1,
   -1,   -1,  279,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,  290,   -1,   -1,  293,  294,   -1,   -1,
  297,   -1,   -1,  300,  301,   -1,   -1,  304,  305,   -1,
  307,  308,  309,  310,  311,  312,   -1,   -1,  315,  316,
  317,  318,  319,  320,  321,  322,  323,  324,  325,  326,
  327,   -1,   -1,   -1,   -1,  332,  333,  334,  335,   -1,
   -1,  338,   -1,   -1,  341,   -1,   -1,   -1,  345,   -1,
   -1,  348,   -1,  350,   -1,   -1,  353,  354,  355,  356,
  357,  358,  359,  360,  361,  362,  363,  364,  271,  272,
  273,   -1,   -1,   -1,   -1,   -1,  279,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,  290,   -1,   -1,
  293,  294,   -1,   -1,  297,   -1,   -1,  300,  301,   -1,
   -1,  304,  305,   -1,  307,  308,  309,  310,  311,  312,
   -1,   -1,  315,  316,  317,  318,  319,  320,  321,  322,
  323,  324,  325,  326,  327,   -1,   -1,   -1,   -1,  332,
  333,  334,  335,   -1,   -1,  338,   -1,   -1,  341,   -1,
   -1,   -1,  345,   -1,   -1,  348,   -1,  350,   -1,   -1,
  353,  354,  355,  356,  357,  358,  359,  360,  361,  362,
  363,  364,  271,  272,  273,   -1,   -1,   -1,   -1,   -1,
  279,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,  290,   -1,   -1,  293,  294,   -1,   -1,  297,   -1,
   -1,  300,  301,   -1,   -1,  304,  305,   -1,  307,  308,
  309,  310,  311,  312,   -1,   -1,  315,  316,  317,  318,
  319,  320,  321,  322,  323,  324,  325,  326,  327,   -1,
   -1,   -1,   -1,  332,  333,  334,  335,   -1,   -1,  338,
   -1,   -1,  341,   -1,   -1,   -1,  345,   -1,   -1,  348,
   -1,  350,   -1,   -1,  353,  354,  355,  356,  357,  358,
  359,  360,  361,  362,  363,  364,  271,  272,  273,   -1,
   -1,   -1,   -1,   -1,  279,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,  290,   -1,   -1,  293,  294,
   -1,   -1,  297,   -1,   -1,  300,  301,   -1,   -1,  304,
  305,   -1,  307,  308,  309,  310,  311,  312,   -1,   -1,
  315,  316,  317,  318,  319,  320,  321,  322,  323,  324,
  325,  326,  327,   -1,   -1,   -1,   -1,  332,  333,  334,
  335,   -1,   -1,  338,   -1,   -1,  341,   -1,   -1,   -1,
  345,   -1,   -1,  348,   -1,  350,   -1,   -1,  353,  354,
  355,  356,  357,  358,  359,  360,  361,  362,  363,  364,
  271,  272,  273,   -1,   -1,   -1,   -1,   -1,  279,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  290,
   -1,   -1,  293,  294,   -1,   -1,  297,   -1,   -1,  300,
  301,   -1,   -1,  304,  305,   -1,  307,  308,  309,  310,
  311,  312,   -1,   -1,  315,  316,  317,  318,  319,  320,
  321,  322,  323,  324,  325,  326,  327,   -1,   -1,   -1,
   -1,  332,  333,  334,  335,   -1,   -1,  338,   -1,   -1,
  341,   -1,   -1,   -1,  345,   -1,   -1,  348,   -1,  350,
   -1,   -1,  353,  354,  355,  356,  357,  358,  359,  360,
  361,  362,  363,  364,  271,  272,  273,   -1,   -1,   -1,
   -1,   -1,  279,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,  290,   -1,   -1,  293,  294,   -1,   -1,
  297,   -1,   -1,  300,  301,   -1,   -1,  304,  305,   -1,
  307,  308,  309,  310,  311,  312,   -1,   -1,  315,  316,
  317,  318,  319,  320,  321,  322,  323,  324,  325,  326,
  327,   -1,   -1,   -1,   -1,  332,  333,  334,  335,   -1,
   -1,  338,   -1,   -1,  341,   -1,   -1,   -1,  345,   -1,
   -1,  348,   -1,  350,   -1,   -1,  353,  354,  355,  356,
  357,  358,  359,  360,  361,  362,  363,  364,  271,  272,
  273,   -1,   -1,   -1,   -1,   -1,  279,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,  290,   -1,   -1,
  293,  294,   -1,   -1,  297,   -1,   -1,  300,  301,   -1,
   -1,  304,  305,   -1,  307,  308,  309,  310,  311,  312,
   -1,   -1,  315,  316,  317,  318,  319,  320,  321,  322,
  323,  324,  325,  326,  327,   -1,   -1,   -1,   -1,  332,
  333,  334,  335,   -1,   -1,  338,   -1,   -1,  341,   -1,
   -1,   -1,  345,   -1,   -1,  348,   -1,  350,   -1,   -1,
  353,  354,  355,  356,  357,  358,  359,  360,  361,  362,
  363,  364,  271,  272,  273,   -1,   -1,   -1,   -1,   -1,
  279,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,  290,   -1,   -1,  293,  294,   -1,   -1,  297,   -1,
   -1,  300,  301,   -1,   -1,  304,  305,   -1,  307,  308,
  309,  310,  311,  312,   -1,   -1,  315,  316,  317,  318,
  319,  320,  321,  322,  323,  324,  325,  326,  327,   -1,
   -1,   -1,   -1,  332,  333,  334,  335,   -1,   -1,  338,
   -1,   -1,  341,   -1,   -1,   -1,  345,   -1,   -1,  348,
   -1,  350,   -1,   -1,  353,  354,  355,  356,  357,  358,
  359,  360,  361,  362,  363,  364,  271,  272,  273,   -1,
   -1,   -1,   -1,   -1,  279,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,  290,   -1,   -1,  293,  294,
   -1,   -1,  297,   -1,   -1,  300,  301,   -1,   -1,  304,
  305,   -1,  307,  308,  309,  310,  311,  312,   -1,   -1,
  315,  316,  317,  318,  319,  320,  321,  322,  323,  324,
  325,  326,  327,   -1,   -1,   -1,   -1,  332,  333,  334,
  335,   -1,   -1,  338,   -1,   -1,  341,   -1,   -1,   -1,
  345,   -1,   -1,  348,   -1,  350,   -1,   -1,  353,  354,
  355,  356,  357,  358,  359,  360,   -1,  362,  363,  364,
};
#define YYFINAL 6
#ifndef YYDEBUG
#define YYDEBUG 0
#endif
#define YYMAXTOKEN 366
#if YYDEBUG
const char * const yyname[] = {
"end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"':'",0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"NAME","ADDRESSNAME",
"STATICNAME","STACKVAR","POINTER","ARRAYNAME","REGSL","REGSW","REGSB","REGS",
"ESP","EBP","PTRESP","FLOATREG","CJMP","CSET","JMP","STRINGLABEL","STR",
"STRSECTION","DTYPE","NUM","LABEL","HEXNUM","GLOBAL","TYPE","SIZE","ZERO",
"LOCAL","END","COMM","OBJECT","FUNCTION","FUNCEND","FADDS","FADDL","FADD",
"FADDP","FIADDS","FIADDL","FIADD","FSUBS","FSUBL","FSUB","FSUBP","FSUBRS",
"FSUBRL","FSUBR","FSUBRP","MULL","IMULL","MULB","FMUL","FMULP","IDIVL","DIVL",
"FDIVL","FDIVS","FDIV","FDIVP","FDIVR","FDIVRP","INC","DEC","FABS","FCHS",
"TEST","NOT","NEG","PUSHL","POPL","MOVZBL","MOVSBL","MOVSBW","MOVSWL","MOVBL",
"MOVBW","MOVWL","MOV","FSTS","FSTTL","FST","FSTPS","FSTPL","FSTP","FISTPS",
"FISTPL","FISTPLL","FISTP","FISTS","FISTL","FIST","FLDS","FLD","FILDL","FILDS",
"FILD","FLD1","FLDZ","FXCH","CMP","FNSTSW","FUCOMPP","FNSTCW","FLDCW","OPCODE",
"CALL","LEAL","SUM","LOW",
};
const char * const yyrule[] = {
"$accept : decl",
"$$1 :",
"decl : GLOBAL NAME $$1 type",
"$$2 :",
"decl : $$2 type",
"$$3 :",
"decl : STRINGLABEL ':' STRSECTION STR $$3 decl",
"$$4 :",
"decl : STRINGLABEL ':' DTYPE NUM $$4 decl",
"$$5 :",
"decl : LOCAL NAME $$5 decl",
"$$6 :",
"decl : COMM NAME NUM NUM $$6 decl",
"$$7 :",
"decl : COMM NAME NUM NUM NUM $$7 decl",
"decl : END",
"type : TYPE NAME OBJECT size",
"type : TYPE NAME FUNCTION process_func",
"$$8 :",
"size : SIZE NAME NUM $$8 initialize",
"$$9 :",
"size : STRINGLABEL ':' $$9 initializers",
"$$10 :",
"initialize : NAME ':' $$10 initializers",
"$$11 :",
"initializers : DTYPE NUM $$11 initializers",
"initializers : decl",
"$$12 :",
"process_func : NAME ':' $$12 read",
"$$13 :",
"read : LABEL ':' $$13 read",
"$$14 :",
"read : JMP LABEL $$14 read",
"$$15 :",
"read : CJMP LABEL $$15 read",
"$$16 :",
"read : CSET REGS $$16 read",
"$$17 :",
"read : CSET NAME $$17 read",
"$$18 :",
"read : INC REGS $$18 read",
"$$19 :",
"read : INC NAME $$19 read",
"$$20 :",
"read : INC STACKVAR $$20 read",
"$$21 :",
"read : INC POINTER $$21 read",
"$$22 :",
"read : INC ARRAYNAME NUM $$22 read",
"$$23 :",
"read : INC ARRAYNAME $$23 read",
"$$24 :",
"read : DEC REGS $$24 read",
"$$25 :",
"read : DEC NAME $$25 read",
"$$26 :",
"read : DEC STACKVAR $$26 read",
"$$27 :",
"read : DEC POINTER $$27 read",
"$$28 :",
"read : DEC ARRAYNAME NUM $$28 read",
"$$29 :",
"read : DEC ARRAYNAME $$29 read",
"$$30 :",
"read : NEG REGS $$30 read",
"$$31 :",
"read : NEG NAME $$31 read",
"$$32 :",
"read : NEG STACKVAR $$32 read",
"$$33 :",
"read : NEG ARRAYNAME $$33 read",
"$$34 :",
"read : NEG POINTER $$34 read",
"$$35 :",
"read : NOT REGS $$35 read",
"$$36 :",
"read : NOT NAME $$36 read",
"$$37 :",
"read : NOT STACKVAR $$37 read",
"$$38 :",
"read : NOT ARRAYNAME $$38 read",
"$$39 :",
"read : NOT POINTER $$39 read",
"$$40 :",
"read : OPCODE REGS REGS $$40 read",
"$$41 :",
"read : OPCODE REGS NAME $$41 read",
"$$42 :",
"read : OPCODE NAME REGS $$42 read",
"$$43 :",
"read : OPCODE NUM NAME $$43 read",
"$$44 :",
"read : OPCODE REGS ARRAYNAME $$44 read",
"$$45 :",
"read : OPCODE ARRAYNAME REGS $$45 read",
"$$46 :",
"read : OPCODE NUM ARRAYNAME $$46 read",
"$$47 :",
"read : OPCODE ADDRESSNAME REGS $$47 read",
"$$48 :",
"read : OPCODE REGS STACKVAR $$48 read",
"$$49 :",
"read : OPCODE STACKVAR REGS $$49 read",
"$$50 :",
"read : OPCODE NUM STACKVAR $$50 read",
"$$51 :",
"read : OPCODE REGS POINTER $$51 read",
"$$52 :",
"read : OPCODE POINTER REGS $$52 read",
"$$53 :",
"read : OPCODE NUM POINTER $$53 read",
"$$54 :",
"read : OPCODE NUM REGS $$54 read",
"$$55 :",
"read : OPCODE NUM NAME NUM $$55 read",
"$$56 :",
"read : IDIVL NAME $$56 read",
"$$57 :",
"read : IDIVL ARRAYNAME $$57 read",
"$$58 :",
"read : IDIVL STACKVAR $$58 read",
"$$59 :",
"read : IDIVL REGS $$59 read",
"$$60 :",
"read : DIVL NAME $$60 read",
"$$61 :",
"read : DIVL ARRAYNAME $$61 read",
"$$62 :",
"read : DIVL STACKVAR $$62 read",
"$$63 :",
"read : DIVL REGS $$63 read",
"$$64 :",
"read : IMULL REGS $$64 read",
"$$65 :",
"read : IMULL REGS REGS $$65 read",
"$$66 :",
"read : IMULL NAME REGS $$66 read",
"$$67 :",
"read : IMULL STACKVAR REGS $$67 read",
"$$68 :",
"read : IMULL ARRAYNAME REGS $$68 read",
"$$69 :",
"read : IMULL NUM REGS $$69 read",
"$$70 :",
"read : MULB NAME $$70 read",
"$$71 :",
"read : MULB ARRAYNAME $$71 read",
"$$72 :",
"read : MULB STACKVAR $$72 read",
"$$73 :",
"read : MOV REGS REGS $$73 read",
"$$74 :",
"read : MOV REGS NAME $$74 read",
"$$75 :",
"read : MOV REGS STACKVAR $$75 read",
"$$76 :",
"read : MOV REGS POINTER $$76 read",
"$$77 :",
"read : MOV NAME REGS $$77 read",
"$$78 :",
"read : MOV STACKVAR REGS $$78 read",
"$$79 :",
"read : MOV NUM REGS $$79 read",
"$$80 :",
"read : MOV NUM NAME $$80 read",
"$$81 :",
"read : MOV NUM STACKVAR $$81 read",
"$$82 :",
"read : MOV NUM ARRAYNAME $$82 read",
"$$83 :",
"read : MOV REGS ARRAYNAME $$83 read",
"$$84 :",
"read : MOV ARRAYNAME REGS $$84 read",
"$$85 :",
"read : MOV HEXNUM STACKVAR $$85 read",
"$$86 :",
"read : MOVBW REGS REGS $$86 read",
"$$87 :",
"read : MOVBW NAME REGS $$87 read",
"$$88 :",
"read : MOVBW STACKVAR REGS $$88 read",
"$$89 :",
"read : MOVWL REGS REGS $$89 read",
"$$90 :",
"read : MOVWL NAME REGS $$90 read",
"$$91 :",
"read : MOVWL STACKVAR REGS $$91 read",
"$$92 :",
"read : MOVBL REGS REGS $$92 read",
"$$93 :",
"read : MOVBL NAME REGS $$93 read",
"$$94 :",
"read : MOVBL STACKVAR REGS $$94 read",
"$$95 :",
"read : CMP REGS REGS $$95 read",
"$$96 :",
"read : CMP REGS NAME $$96 read",
"$$97 :",
"read : CMP REGS STACKVAR $$97 read",
"$$98 :",
"read : CMP REGS ARRAYNAME $$98 read",
"$$99 :",
"read : CMP NAME REGS $$99 read",
"$$100 :",
"read : CMP STACKVAR REGS $$100 read",
"$$101 :",
"read : CMP ARRAYNAME REGS $$101 read",
"$$102 :",
"read : CMP NUM NAME $$102 read",
"$$103 :",
"read : CMP NUM STACKVAR $$103 read",
"$$104 :",
"read : CMP NUM ARRAYNAME $$104 read",
"$$105 :",
"read : CMP NAME NUM $$105 read",
"$$106 :",
"read : CMP STACKVAR NUM $$106 read",
"$$107 :",
"read : CMP ARRAYNAME NUM $$107 read",
"$$108 :",
"read : CMP NUM REGS $$108 read",
"$$109 :",
"read : CMP REGS NUM $$109 read",
"$$110 :",
"read : TEST REGS REGS $$110 read",
"$$111 :",
"read : TEST NUM REGS $$111 read",
"$$112 :",
"read : TEST NAME REGS $$112 read",
"$$113 :",
"read : TEST STACKVAR REGS $$113 read",
"$$114 :",
"read : TEST ARRAYNAME REGS $$114 read",
"$$115 :",
"read : TEST NAME NUM $$115 read",
"$$116 :",
"read : TEST STACKVAR NUM $$116 read",
"$$117 :",
"read : MOV REGS ESP $$117 read",
"$$118 :",
"read : MOV ESP REGS $$118 read",
"$$119 :",
"read : MOV ESP EBP $$119 read",
"$$120 :",
"read : OPCODE REGS ESP $$120 read",
"$$121 :",
"read : OPCODE NUM ESP $$121 read",
"read : POPL REGS read",
"read : POPL NAME read",
"$$122 :",
"read : FABS $$122 read",
"$$123 :",
"read : FCHS $$123 read",
"$$124 :",
"read : FXCH $$124 read",
"$$125 :",
"read : FXCH FLOATREG $$125 read",
"$$126 :",
"read : FLD1 $$126 read",
"$$127 :",
"read : FLDZ $$127 read",
"$$128 :",
"read : FLD NAME $$128 read",
"$$129 :",
"read : FLD STACKVAR $$129 read",
"$$130 :",
"read : FLD FLOATREG $$130 read",
"$$131 :",
"read : FLD STRINGLABEL $$131 read",
"$$132 :",
"read : FILD NAME $$132 read",
"$$133 :",
"read : FILD STACKVAR $$133 read",
"$$134 :",
"read : FST FLOATREG $$134 read",
"$$135 :",
"read : FST NAME $$135 read",
"$$136 :",
"read : FST STACKVAR $$136 read",
"$$137 :",
"read : FSTP FLOATREG $$137 read",
"$$138 :",
"read : FSTP NAME $$138 read",
"$$139 :",
"read : FSTP STACKVAR $$139 read",
"$$140 :",
"read : FIST NAME $$140 read",
"$$141 :",
"read : FIST STACKVAR $$141 read",
"$$142 :",
"read : FISTP NAME $$142 read",
"$$143 :",
"read : FISTP STACKVAR $$143 read",
"$$144 :",
"read : FADD FLOATREG $$144 read",
"$$145 :",
"read : FADD FLOATREG FLOATREG $$145 read",
"$$146 :",
"read : FADD NAME $$146 read",
"$$147 :",
"read : FADD STACKVAR $$147 read",
"$$148 :",
"read : FADDP FLOATREG FLOATREG $$148 read",
"$$149 :",
"read : FIADD NAME $$149 read",
"$$150 :",
"read : FIADD STACKVAR $$150 read",
"$$151 :",
"read : FSUB FLOATREG $$151 read",
"$$152 :",
"read : FSUB FLOATREG FLOATREG $$152 read",
"$$153 :",
"read : FSUB NAME $$153 read",
"$$154 :",
"read : FSUB STACKVAR $$154 read",
"$$155 :",
"read : FSUBP FLOATREG FLOATREG $$155 read",
"$$156 :",
"read : FSUBR FLOATREG $$156 read",
"$$157 :",
"read : FSUBR NAME $$157 read",
"$$158 :",
"read : FSUBR STACKVAR $$158 read",
"$$159 :",
"read : FSUBRP FLOATREG FLOATREG $$159 read",
"$$160 :",
"read : FMUL NAME $$160 read",
"$$161 :",
"read : FMUL STACKVAR $$161 read",
"$$162 :",
"read : FMUL FLOATREG $$162 read",
"$$163 :",
"read : FMUL FLOATREG FLOATREG $$163 read",
"$$164 :",
"read : FMULP FLOATREG FLOATREG $$164 read",
"$$165 :",
"read : FDIV FLOATREG $$165 read",
"$$166 :",
"read : FDIV FLOATREG FLOATREG $$166 read",
"$$167 :",
"read : FDIV NAME $$167 read",
"$$168 :",
"read : FDIV STACKVAR $$168 read",
"$$169 :",
"read : FDIVR NAME $$169 read",
"$$170 :",
"read : FDIVR STACKVAR $$170 read",
"$$171 :",
"read : FDIVR FLOATREG $$171 read",
"$$172 :",
"read : FDIVP FLOATREG FLOATREG $$172 read",
"$$173 :",
"read : FDIVRP FLOATREG FLOATREG $$173 read",
"$$174 :",
"read : FUCOMPP $$174 read",
"$$175 :",
"read : FNSTSW REGS TEST NUM REGS $$175 read",
"$$176 :",
"read : FNSTSW REGS OPCODE NUM REGS OPCODE NUM REGS $$176 read",
"$$177 :",
"read : FNSTSW REGS OPCODE NUM REGS CMP NUM REGS $$177 read",
"read : FNSTCW STACKVAR MOV STACKVAR REGS MOV NUM REGS MOV REGS STACKVAR rest read",
"read : FLDCW STACKVAR perform_operation FLDCW STACKVAR read",
"read : PUSHL EBP read",
"$$178 :",
"read : PUSHL REGS $$178 read",
"$$179 :",
"read : PUSHL NAME $$179 read",
"$$180 :",
"read : PUSHL ADDRESSNAME $$180 read",
"$$181 :",
"read : PUSHL STACKVAR $$181 read",
"$$182 :",
"read : PUSHL STR $$182 read",
"$$183 :",
"read : PUSHL NUM $$183 read",
"$$184 :",
"read : FILD PTRESP LEAL NUM PTRESP ESP $$184 read",
"$$185 :",
"read : LEAL NUM POINTER REGS $$185 read",
"$$186 :",
"read : LEAL SUM REGS $$186 read",
"$$187 :",
"read : LEAL STACKVAR REGS $$187 read",
"$$188 :",
"read : LEAL NAME REGS $$188 read",
"$$189 :",
"read : LEAL NUM PTRESP $$189 ESP read",
"$$190 :",
"read : LEAL STACKVAR ESP $$190 read",
"$$191 :",
"read : FSTP PTRESP $$191 read",
"$$192 :",
"read : CALL NAME $$192 read",
"read : FUNCEND",
"perform_operation : FISTP STACKVAR",
"perform_operation : FISTP NAME",
"perform_operation : FISTPLL STACKVAR",
"rest : FLDCW STACKVAR perform_operation FLDCW STACKVAR",
"rest :",
};
#endif
#if YYDEBUG
#include <stdio.h>
#endif
#ifdef YYSTACKSIZE
#undef YYMAXDEPTH
#define YYMAXDEPTH YYSTACKSIZE
#else
#ifdef YYMAXDEPTH
#define YYSTACKSIZE YYMAXDEPTH
#else
#define YYSTACKSIZE 10000
#define YYMAXDEPTH 10000
#endif
#endif
#define YYINITSTACKSIZE 200
int yydebug;
int yynerrs;
int yyerrflag;
int yychar;
short *yyssp;
YYSTYPE *yyvsp;
YYSTYPE yyval;
YYSTYPE yylval;
short *yyss;
short *yysslim;
YYSTYPE *yyvs;
int yystacksize;
#line 2093 "start.y"

int yyerror( char *s )
{
	if ( strstr(s, "syntax" ) != NULL )
		cerr << "Illegal instruction found at line " 
			<< yylineno << endl;
	else
		cerr << s << endl;
	throw EXIT_FAILURE;
}

#line 1321 "yacc.cpp"
/* allocate initial stack or double stack size, up to YYMAXDEPTH */
static int yygrowstack()
{
    int newsize, i;
    short *newss;
    YYSTYPE *newvs;

    if ((newsize = yystacksize) == 0)
        newsize = YYINITSTACKSIZE;
    else if (newsize >= YYMAXDEPTH)
        return -1;
    else if ((newsize *= 2) > YYMAXDEPTH)
        newsize = YYMAXDEPTH;
    i = yyssp - yyss;
    newss = yyss ? (short *)realloc(yyss, newsize * sizeof *newss) :
      (short *)malloc(newsize * sizeof *newss);
    if (newss == NULL)
        return -1;
    yyss = newss;
    yyssp = newss + i;
    newvs = yyvs ? (YYSTYPE *)realloc(yyvs, newsize * sizeof *newvs) :
      (YYSTYPE *)malloc(newsize * sizeof *newvs);
    if (newvs == NULL)
        return -1;
    yyvs = newvs;
    yyvsp = newvs + i;
    yystacksize = newsize;
    yysslim = yyss + newsize - 1;
    return 0;
}

#define YYABORT goto yyabort
#define YYREJECT goto yyabort
#define YYACCEPT goto yyaccept
#define YYERROR goto yyerrlab

#ifndef YYPARSE_PARAM
#if defined(__cplusplus) || __STDC__
#define YYPARSE_PARAM_ARG void
#define YYPARSE_PARAM_DECL
#else	/* ! ANSI-C/C++ */
#define YYPARSE_PARAM_ARG
#define YYPARSE_PARAM_DECL
#endif	/* ANSI-C/C++ */
#else	/* YYPARSE_PARAM */
#ifndef YYPARSE_PARAM_TYPE
#define YYPARSE_PARAM_TYPE void *
#endif
#if defined(__cplusplus) || __STDC__
#define YYPARSE_PARAM_ARG YYPARSE_PARAM_TYPE YYPARSE_PARAM
#define YYPARSE_PARAM_DECL
#else	/* ! ANSI-C/C++ */
#define YYPARSE_PARAM_ARG YYPARSE_PARAM
#define YYPARSE_PARAM_DECL YYPARSE_PARAM_TYPE YYPARSE_PARAM;
#endif	/* ANSI-C/C++ */
#endif	/* ! YYPARSE_PARAM */

int
yyparse (YYPARSE_PARAM_ARG)
    YYPARSE_PARAM_DECL
{
    register int yym, yyn, yystate;
#if YYDEBUG
    register const char *yys;

    if ((yys = getenv("YYDEBUG")))
    {
        yyn = *yys;
        if (yyn >= '0' && yyn <= '9')
            yydebug = yyn - '0';
    }
#endif

    yynerrs = 0;
    yyerrflag = 0;
    yychar = (-1);

    if (yyss == NULL && yygrowstack()) goto yyoverflow;
    yyssp = yyss;
    yyvsp = yyvs;
    *yyssp = yystate = 0;

yyloop:
    if ((yyn = yydefred[yystate])) goto yyreduce;
    if (yychar < 0)
    {
        if ((yychar = yylex()) < 0) yychar = 0;
#if YYDEBUG
        if (yydebug)
        {
            yys = 0;
            if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
            if (!yys) yys = "illegal-symbol";
            printf("%sdebug: state %d, reading %d (%s)\n",
                    YYPREFIX, yystate, yychar, yys);
        }
#endif
    }
    if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
            yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
    {
#if YYDEBUG
        if (yydebug)
            printf("%sdebug: state %d, shifting to state %d\n",
                    YYPREFIX, yystate, yytable[yyn]);
#endif
        if (yyssp >= yysslim && yygrowstack())
        {
            goto yyoverflow;
        }
        *++yyssp = yystate = yytable[yyn];
        *++yyvsp = yylval;
        yychar = (-1);
        if (yyerrflag > 0)  --yyerrflag;
        goto yyloop;
    }
    if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
            yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
    {
        yyn = yytable[yyn];
        goto yyreduce;
    }
    if (yyerrflag) goto yyinrecovery;
#if defined(lint) || defined(__GNUC__)
    goto yynewerror;
#endif
yynewerror:
    yyerror("syntax error");
#if defined(lint) || defined(__GNUC__)
    goto yyerrlab;
#endif
yyerrlab:
    ++yynerrs;
yyinrecovery:
    if (yyerrflag < 3)
    {
        yyerrflag = 3;
        for (;;)
        {
            if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 &&
                    yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
            {
#if YYDEBUG
                if (yydebug)
                    printf("%sdebug: state %d, error recovery shifting\
 to state %d\n", YYPREFIX, *yyssp, yytable[yyn]);
#endif
                if (yyssp >= yysslim && yygrowstack())
                {
                    goto yyoverflow;
                }
                *++yyssp = yystate = yytable[yyn];
                *++yyvsp = yylval;
                goto yyloop;
            }
            else
            {
#if YYDEBUG
                if (yydebug)
                    printf("%sdebug: error recovery discarding state %d\n",
                            YYPREFIX, *yyssp);
#endif
                if (yyssp <= yyss) goto yyabort;
                --yyssp;
                --yyvsp;
            }
        }
    }
    else
    {
        if (yychar == 0) goto yyabort;
#if YYDEBUG
        if (yydebug)
        {
            yys = 0;
            if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
            if (!yys) yys = "illegal-symbol";
            printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
                    YYPREFIX, yystate, yychar, yys);
        }
#endif
        yychar = (-1);
        goto yyloop;
    }
yyreduce:
#if YYDEBUG
    if (yydebug)
        printf("%sdebug: state %d, reducing by rule %d (%s)\n",
                YYPREFIX, yystate, yyn, yyrule[yyn]);
#endif
    yym = yylen[yyn];
    yyval = yyvsp[1-yym];
    switch (yyn)
    {
case 1:
#line 181 "start.y"
{
		curSymTab.insert( yyvsp[0].name, SymInfo( ) );
		curSymTab[ yyvsp[0].name ]._seen = true;
	}
break;
case 3:
#line 186 "start.y"
{
		/* globl qualifier missing */
		/*function or object is static*/
		isStatic = true;
	}
break;
case 5:
#line 192 "start.y"
{
		curStringTab.insert( yyvsp[-3].num, yyvsp[0].name );
	}
break;
case 7:
#line 196 "start.y"
{

		curName.assign( itoa( yyvsp[-3].num ) ) ;
		curSymTab.insert( curName, SymInfo( ) );
		curSymTab[ curName ].isTemp = true;
		curSymTab[ curName ].modValue( convert2Float( yyvsp[0].num ) );
	}
break;
case 9:
#line 204 "start.y"
{
		curSymTab.insert( yyvsp[0].name, SymInfo( ) );
		curSymTab[ yyvsp[0].name ].makStatic( );
	}
break;
case 11:
#line 209 "start.y"
{
		SymInfo &var = curSymTab[ yyvsp[-2].name ];
		curSymTab.insert( yyvsp[-2].name, SymInfo( ) );
		var.modSize( yyvsp[-1].num );
		var._seen = true;
		if ( yyvsp[-1].num != yyvsp[0].num )
			var.makArray( );
        }
break;
case 13:
#line 218 "start.y"
{
		curSymTab.insert( yyvsp[-3].name, SymInfo( ) );
		curSymTab[ yyvsp[-3].name ].modSize( yyvsp[-2].num );
		curSymTab[ yyvsp[-3].name ].makLocal( );
	}
break;
case 15:
#line 225 "start.y"
{
		return 0;
	}
break;
case 18:
#line 234 "start.y"
{
			if ( isStatic ) {
				curSymTab.insert( yyvsp[-1].name, SymInfo( ) );
				curSymTab[ yyvsp[-1].name ].makStatic( );
				isStatic = false;
			}
			curSymTab[ yyvsp[-1].name ].modSize( yyvsp[0].num );
	}
break;
case 20:
#line 243 "start.y"
{
		/* this label is assigned a constant value */
		curName.assign( itoa( yyvsp[-1].num ) ) ;
		curSymTab[ curName ].isTemp = true;
	}
break;
case 22:
#line 250 "start.y"
{
			curName.assign( yyvsp[-1].name );
		}
break;
case 24:
#line 255 "start.y"
{
			SymInfo &var = curSymTab[ curName ];
			var.modType( str2e( yyvsp[-1].name ) );
			var.modInitValue( itoa( yyvsp[0].num ) );
			if ( string( yyvsp[-1].name ) == "byte" )
				var.fixType( str2e( yyvsp[-1].name ) );
		}
break;
case 27:
#line 266 "start.y"
{
			if ( VERBOSE ) {
				verbose( ( "Found function \"" 
					+ string( yyvsp[-1].name )
					+ "\"" ).c_str( ) );
				verbose( "\tStarting Data Flow Analysis" );
			}
			seenOnce = false;
			curBlockTab.funcName = yyvsp[-1].name;
			curActRecord = &curFuncTab[ yyvsp[-1].name ];
			curSymTab.insert( yyvsp[-1].name, SymInfo( ) );
			if ( isStatic == true ) {
				curSymTab[ yyvsp[-1].name ].makStatic( );
				isStatic = false;
			}
			curSymTab[ yyvsp[-1].name ].modType( FUNC );
			curBlock = BasicBlock::getNewBlock( );
		}
break;
case 29:
#line 288 "start.y"
{
			curLabelTab.insert( yyvsp[-1].num, curBlockTab.curBlockNum + 1 );
			if( SAW_JUMP != true )curBlockTab.insert(curBlock, yyvsp[-1].num);
			curBlock = BasicBlock::getNewBlock( );
			++curBlockTab.curBlockNum;
			SAW_JUMP = false;
		}
break;
case 31:
#line 296 "start.y"
{
			curBlockTab.insert( curBlock, yyvsp[0].num );
			SAW_JUMP= true;
		}
break;
case 33:
#line 301 "start.y"
{
			int t = LabelTab::tempLabel( );
			curLabelTab.insert( t, curBlockTab.curBlockNum + 1 );
			curBlock -> leftOp( cmpOp1 );
			curBlock -> rightOp( cmpOp2 );
			curBlock -> cmpOperator( yyvsp[-1].name );
			curBlockTab.insert( curBlock, yyvsp[0].num, t );
			curBlock = BasicBlock::getNewBlock( );
			curBlockTab.curBlockNum++;
		}
break;
case 35:
#line 312 "start.y"
{
			curSymTab[ yyvsp[0].name ].modValue( "(" + cmpOp1 
						+ convert( yyvsp[-1].name ) 
						+ cmpOp2 + ")"
						);
		}
break;
case 37:
#line 319 "start.y"
{
			curInstr = curSymTab[ yyvsp[0].name ].getName( )
					+ "= " 
					+ cmpOp1 + convert( yyvsp[-1].name ) + cmpOp2;
			curBlock -> insert( curInstr + ";" );
		}
break;
case 39:
#line 326 "start.y"
{
			SymInfo &regs = curSymTab[ yyvsp[0].name ];
			regs.modValue( "(" + regs.getValue( ) +  ")+1" );
			regs.modType( yyvsp[-1].type );
		}
break;
case 41:
#line 332 "start.y"
{
			curInstr = "++" + curSymTab[ yyvsp[0].name ].getName( ) ;
			curBlock -> insert( curInstr + ";" );
			curSymTab[ yyvsp[0].name ].fixType( yyvsp[-1].type );
		}
break;
case 43:
#line 338 "start.y"
{
	
			SymInfo &var = ( *curActRecord )[ yyvsp[0].num ];	
			curInstr = "++" + var.getName( ) ;
			curBlock -> insert( curInstr + ";" );
			var.fixType( yyvsp[-1].type );
                }
break;
case 45:
#line 346 "start.y"
{
	
			SymInfo *&pt = curSymTab[ yyvsp[0].name ].reference;
			curInstr = "++" + pt -> getName( );
			curBlock -> insert( curInstr + ";" );
			pt -> fixType( yyvsp[-1].type );

		}
break;
case 47:
#line 355 "start.y"
{

			SymInfo &var = curSymTab[ yyvsp[-1].name ];
			var.makArray( );
			var.fixType( yyvsp[-2].type );
			int arrayIndex = yyvsp[0].num / sizeOfType( yyvsp[-2].type );
			curInstr = "++" + var.getName( ) 
					+ "[ " + itoa( arrayIndex ) + " ]";
			curBlock -> insert( curInstr + ";" );
		}
break;
case 49:
#line 366 "start.y"
{

			SymInfo &var = curSymTab[ yyvsp[0].name ];
			SymInfo &regs = curSymTab[ tempArray.regs ];
			var.makArray( );
			var.fixType( yyvsp[-1].type );
			curInstr = "++" + var.getName( ) 
					+ "[ " + regs.getValue( ) + " ]";
			curBlock -> insert( curInstr + ";" );
		}
break;
case 51:
#line 377 "start.y"
{
                                                                                
			SymInfo &regs = curSymTab[ yyvsp[0].name ];
			regs.modValue( "((" + regs.getValue( ) + ")-1) " ) ;
			regs.modType( yyvsp[-1].type );		
                }
break;
case 53:
#line 384 "start.y"
{
			curInstr = "--" + curSymTab[ yyvsp[0].name ].getName( );
			curBlock -> insert( curInstr + ";" );
			curSymTab[ yyvsp[0].name ].fixType( yyvsp[-1].type );
		}
break;
case 55:
#line 390 "start.y"
{

			SymInfo &var = ( *curActRecord )[ yyvsp[0].num ];	
                        curInstr = "--" + var.getName( );
                        curBlock -> insert( curInstr + ";" );
                        var.fixType( yyvsp[-1].type );
			
                }
break;
case 57:
#line 399 "start.y"
{

			SymInfo *&pt = curSymTab[ yyvsp[0].name ].reference;
			curInstr = "--" + pt -> getName( );
			curBlock -> insert( curInstr + ";" );
			pt -> fixType( yyvsp[-1].type );

		}
break;
case 59:
#line 408 "start.y"
{

			SymInfo &var = curSymTab[ yyvsp[-1].name ];
			var.makArray( );
			var.fixType( yyvsp[-2].type );
			int arrayIndex = yyvsp[0].num / sizeOfType( yyvsp[-2].type );
			curInstr = "--" + var.getName( ) 
					+ "[ " + itoa( arrayIndex ) + " ]";
			curBlock -> insert( curInstr + ";" );
		}
break;
case 61:
#line 419 "start.y"
{

			SymInfo &var = curSymTab[ yyvsp[0].name ];
			SymInfo &regs = curSymTab[ tempArray.regs ];
			var.makArray( );
			var.fixType( yyvsp[-1].type );
			curInstr = "--" + var.getName( ) 
					+ "[ " + regs.getValue( ) + " ]";
			curBlock -> insert( curInstr + ";" );
		}
break;
case 63:
#line 430 "start.y"
{
			SymInfo &regs = curSymTab[yyvsp[0].name];
			regs.modValue( " -(" + regs.getValue( ) + ")" );
			regs.modType( yyvsp[-1].type );		
                }
break;
case 65:
#line 436 "start.y"
{
			SymInfo &var = curSymTab[ yyvsp[0].name ];
			curInstr = var.getName( ) + "= -" + var.getName( );
			curBlock -> insert( curInstr + ";" );
			var.fixType( yyvsp[-1].type );
                }
break;
case 67:
#line 443 "start.y"
{
		
			SymInfo &var = curActRecord -> at( yyvsp[0].num );
			curInstr = var.getName( ) + "= -" + var.getName( );
			curBlock -> insert( curInstr + ";" );
			var.fixType( yyvsp[-1].type );
			
                }
break;
case 69:
#line 452 "start.y"
{

			SymInfo &array = curSymTab[ tempArray.name ];
			SymInfo &regs = curSymTab[ tempArray.regs ];
			array.makArray( );
			array.fixType( yyvsp[-1].type );
			const string &iForm = indexForm( array, regs );
			curInstr = iForm + "= -" + iForm;
			curBlock -> insert( curInstr + ";" );
		}
break;
case 71:
#line 463 "start.y"
{
			SymInfo *&var = curSymTab[ yyvsp[0].name ].reference;
			curInstr = var -> getName( ) + "= -" +var -> getName( );
			curBlock -> insert( curInstr + ";" );
			var -> fixType( yyvsp[-1].type );
		}
break;
case 73:
#line 470 "start.y"
{
			SymInfo &regs = curSymTab[ yyvsp[0].name ];
			regs.value = "~(" + regs.getValue( ) + ")";
			regs.modType( yyvsp[-1].type );		
                }
break;
case 75:
#line 476 "start.y"
{

			const string &name = curSymTab[ yyvsp[0].name ].getName( );
                        curInstr = name + "= ~" + name;
                        curBlock -> insert( curInstr + ";" );
			curSymTab[ yyvsp[0].name ].fixType( yyvsp[-1].type );

                }
break;
case 77:
#line 485 "start.y"
{
			SymInfo &var = ( *curActRecord )[ yyvsp[0].num ];
                        curInstr = var.getName( ) + "= ~" + var.getName( );
                        curBlock -> insert( curInstr + ";" );
			var.fixType( yyvsp[-1].type );

                }
break;
case 79:
#line 493 "start.y"
{

			SymInfo &array = curSymTab[ tempArray.name ];
			SymInfo &regs = curSymTab[ tempArray.regs ];
			array.makArray( );
			array.fixType( yyvsp[-1].type );
			const string &iForm = indexForm( array, regs );
			curInstr = iForm + "= ~" + iForm;
			curBlock -> insert( curInstr + ";" );
		}
break;
case 81:
#line 504 "start.y"
{
		
			SymInfo *&var = curSymTab[ yyvsp[0].name ].reference;
                        curInstr = var -> getName( ) + "= ~"+ var -> getName( );
                        curBlock -> insert( curInstr + ";" );
			var -> fixType( yyvsp[-1].type );

                }
break;
case 83:
#line 513 "start.y"
{

			SymInfo &regs1 = curSymTab[ yyvsp[-1].name ];
			SymInfo &regs2 = curSymTab[ yyvsp[0].name ];
			regs2.modValue( "(" + regs2.getValue( ) + ")"
					+ string( yyvsp[-2].name )
				+ "(" + regs1.getValue( ) + ")"
				);
			regs2.modType( opcode );
			regs1.modType( opcode );
			
		}
break;
case 85:
#line 526 "start.y"
{
			
			SymInfo &regs = curSymTab[ yyvsp[-1].name ];
			SymInfo &var = curSymTab[ yyvsp[0].name ];
			curInstr = var.getName( ) + string( yyvsp[-2].name ) + "=" +
						regs.getValue( );
			
			curBlock -> insert( curInstr + ";" );
			var.modType( opcode );
			regs.modType( opcode );
                }
break;
case 87:
#line 538 "start.y"
{

			SymInfo &regs = curSymTab[ yyvsp[0].name ];
			SymInfo &var = curSymTab[ yyvsp[-1].name ];
			regs.modValue( "(" + regs.getValue( ) + ")" 
					+ string( yyvsp[-2].name ) 
					+ var.getName( )
				);
			var.modType( opcode );
			regs.modType( opcode );
                }
break;
case 89:
#line 550 "start.y"
{
			curInstr = curSymTab[ yyvsp[0].name ].getName( ) + string( yyvsp[-2].name ) 
							+ "=" + itoa( yyvsp[-1].num ) ;
			curBlock -> insert( curInstr + ";" );
                }
break;
case 91:
#line 556 "start.y"
{
			
			SymInfo &array = curSymTab[ tempArray.name ];
			SymInfo &regs = curSymTab[ tempArray.regs ];
			SymInfo &destRegs = curSymTab[ yyvsp[-1].name ];
			
			curInstr = indexForm( array, regs ) +
				string( yyvsp[-2].name ) + "= " + destRegs.getValue( );
			
			array.modType( opcode );
			array.makArray( );
			destRegs.modType( opcode );
			curBlock -> insert( curInstr + ";" );
                }
break;
case 93:
#line 571 "start.y"
{

			SymInfo &array = curSymTab[ yyvsp[-1].name ];
			SymInfo &regs = curSymTab[ tempArray.regs ];
			SymInfo &destRegs = curSymTab[ yyvsp[0].name ];

			array.makArray( );
			array.modType( opcode );
			
			destRegs.modValue( "(" + destRegs.getValue( ) + ")"
					+ string( yyvsp[-2].name )
					+ indexForm( array, regs )
				);
		}
break;
case 95:
#line 586 "start.y"
{
		
			SymInfo &array = curSymTab[ tempArray.name ];
			curInstr = 
				indexForm( array, curSymTab[ tempArray.regs ] ) 
					+ string( yyvsp[-2].name ) + "=" + itoa( yyvsp[-1].num );

			array.makArray( );
			curBlock -> insert( curInstr + ";" );
			
                }
break;
case 97:
#line 598 "start.y"
{

			SymInfo &var = curSymTab[ yyvsp[-1].name ];
			SymInfo &regs = curSymTab[ yyvsp[0].name ];
			const string &index = regs.getValue( ) + "/" 
					+ itoa( sizeOfType( var.getType( ) ) );
			regs.modValue( "&" + var.getName( ) 
				+ "[" + index + "]" );
			var.makArray( );
			var.modType( opcode );
		}
break;
case 99:
#line 610 "start.y"
{

			SymInfo &regs = curSymTab[ yyvsp[-1].name ];
			SymInfo &var = curActRecord -> at( yyvsp[0].num );
			curInstr = var.getName( ) + string( yyvsp[-2].name ) 
					+ "=" + curSymTab[ yyvsp[-1].name ].getValue( );	
			curBlock -> insert( curInstr + ";" );
			var.modType( opcode );
			regs.modType( opcode );
		}
break;
case 101:
#line 621 "start.y"
{
		
			SymInfo &regs = curSymTab[ yyvsp[0].name ];
			SymInfo &var = curActRecord -> at( yyvsp[-1].num );
			regs.modValue( "(" + regs.getValue( ) + ")" 
					+ string( yyvsp[-2].name ) + var.getName( )
				);
			var.modType( opcode );
			regs.modType( opcode );
		}
break;
case 103:
#line 632 "start.y"
{
			SymInfo &var = curActRecord -> at( yyvsp[0].num );
			curInstr = var.getName( ) + string( yyvsp[-2].name ) 
							+ "=" + itoa( yyvsp[-1].num ) ;
			curBlock -> insert( curInstr + ";" );
                
		}
break;
case 105:
#line 640 "start.y"
{

			SymInfo &regs = curSymTab[ yyvsp[-1].name ];
			SymInfo *&var = curSymTab[ yyvsp[0].name ].reference;
			curInstr = var -> getName( ) + string( yyvsp[-2].name ) + "=" +
					curSymTab[ yyvsp[-1].name ].getValue( );
			curBlock -> insert( curInstr + ";" );
			var -> modType( opcode );
			regs.modType( opcode );
		}
break;
case 107:
#line 651 "start.y"
{
		
			SymInfo &regs = curSymTab[ yyvsp[0].name ];
			SymInfo *&var = curSymTab[ yyvsp[-1].name ].reference;
			regs.modValue( "(" + regs.getValue( ) + ")" 
					+ string( yyvsp[-2].name ) + var -> getName( )
				);
			var -> modType( opcode );
			regs.modType( opcode );
		}
break;
case 109:
#line 662 "start.y"
{
			
			SymInfo *&var = curSymTab[ yyvsp[0].name ].reference;
			curInstr = var -> getName( ) + string( yyvsp[-2].name )
							+ "=" + itoa( yyvsp[-1].num ) ;
			curBlock -> insert( curInstr + ";" );
			var -> modType( opcode );
			
                }
break;
case 111:
#line 672 "start.y"
{
		
			SymInfo &regs = curSymTab[ yyvsp[0].name ];
			regs.modValue( 
					"(" + regs.getValue( ) + ")" 
					+ string( yyvsp[-2].name ) + itoa(yyvsp[-1].num)
				     );
			regs.modType( opcode );
                }
break;
case 113:
#line 682 "start.y"
{
		
			SymInfo &var = curSymTab[ yyvsp[-1].name ];
			curInstr = var.getName( ) + "= -" + var.getName( );
			curBlock -> insert( curInstr + ";" );
			var.fixType( FLOAT );
		}
break;
case 115:
#line 690 "start.y"
{
			SymInfo &var = curSymTab[ yyvsp[0].name ];
			SymInfo &eax = curSymTab[ EAX ];
			curSymTab[ EDX ].modValue( "(" + eax.getValue( ) + ")"
					+ "%" + var.getName( )
					);
					
			eax.modValue( "(" + eax.getValue( ) + ")"
					+ "/" + var.getName( )
					);
			var.modType( LONG );
		}
break;
case 117:
#line 703 "start.y"
{

			SymInfo &array = curSymTab[ yyvsp[0].name ];
			SymInfo &regs = curSymTab[ tempArray.regs ];
			SymInfo &eax = curSymTab[ EAX ];

			array.makArray( );
			array.modType( LONG );

			const string &iForm = indexForm( array, regs );

			curSymTab[ EDX ].modValue( "(" + eax.getValue( ) + ")"
						+ "%" + iForm );
						
			eax.modValue( "(" + eax.getValue( ) + ")"
					+ "/" + iForm );
		}
break;
case 119:
#line 721 "start.y"
{
		
			SymInfo &eax = curSymTab[ EAX ];
			SymInfo &var = curActRecord -> at( yyvsp[0].num );
			
			curSymTab[ EDX ].modValue( 
					"(" + eax.getValue( ) + ")"
					+ "%" + var.getName( )
					);
					
			eax.modValue( "(" + eax.getValue( ) + ")"
					+ "/" + var.getName( )
				);
			var.modType( LONG );
		}
break;
case 121:
#line 737 "start.y"
{

			SymInfo &regs = curSymTab[ yyvsp[0].name ];
			curSymTab[ EDX ].modValue( 
					"(" + curSymTab[ EAX ].getValue( ) + ")"
						+ "%" + regs.getValue( )
					);
			curSymTab[ EAX ].modValue( 
					"(" + curSymTab[ EAX ].getValue( ) + ")"
					+ "/" + regs.getValue( )
				);
			regs.modType( LONG );
		}
break;
case 123:
#line 752 "start.y"
{

			SymInfo &var = curSymTab[ yyvsp[0].name ];	
			curSymTab[ EDX ].modValue( 
					"(" + curSymTab[ EAX ].getValue( ) + ")"
					+ "%" + var.getName( )
					);
			curSymTab[ EAX ].modValue( 
					"(" + curSymTab[ EAX ].getValue( ) + ")"
					+ "/" + var.getName( )
					);
			var.modType( LONG );
			var.makUnsigned( );
		}
break;
case 125:
#line 767 "start.y"
{

			SymInfo &array = curSymTab[ yyvsp[0].name ];
			SymInfo &regs = curSymTab[ tempArray.regs ];
			SymInfo &eax = curSymTab[ EAX ];

			array.makArray( );
			array.makUnsigned( );
			array.modType( LONG );

			const string &iForm = indexForm( array, regs );

			curSymTab[ EDX ].modValue( "(" + eax.getValue( ) + ")"
						+ "%" + iForm );
						
			eax.modValue( "(" + eax.getValue( ) + ")"
					+ "/" + iForm );
		}
break;
case 127:
#line 787 "start.y"
{
		
			SymInfo &regsA = curSymTab[ EAX ];
			SymInfo &var = curActRecord -> at( yyvsp[0].num );
			
			curSymTab[ EDX ].modValue( 
					"(" + regsA.getValue( ) + ")"
					+ "%" + var.getName( )
					);
					
			regsA.modValue( "(" + regsA.getValue( ) + ")"
					+ "/" + var.getName( )
				);
			var.modType( LONG );
			var.makUnsigned( );
		}
break;
case 129:
#line 805 "start.y"
{

			SymInfo &Eax = curSymTab[ EAX ];
			SymInfo &regs = curSymTab[ yyvsp[0].name ];
			curSymTab[ EDX ].modValue( 
					string( "(" + Eax.getValue( ) + ")"
					+ "%" + regs.getValue( ) )
					);
			Eax.modValue(
					string( "(" + Eax.getValue( ) + ")"
					+ "/" + regs.getValue( ) )
				);
			regs.modType( LONG );
		}
break;
case 131:
#line 820 "start.y"
{

			SymInfo &Eax = curSymTab[ EAX ];
			SymInfo &regs2 = curSymTab[ yyvsp[0].name ];
			Eax.modValue( "(" + Eax.getValue( ) + ")"
					+ "*" +
					"(" + regs2.getValue( ) + ")"
				);
			regs2.modType( LONG );
		}
break;
case 133:
#line 831 "start.y"
{
		
			SymInfo &regs2 = curSymTab[ yyvsp[0].name ];
			regs2.modValue( "(" + regs2.getValue( ) + ")" 
						+ "*" + 
					curSymTab[ yyvsp[-1].name ].getValue( )
				);
		}
break;
case 135:
#line 840 "start.y"
{

			SymInfo &var = curSymTab[ yyvsp[-1].name ];	
			SymInfo &regs2 = curSymTab[ yyvsp[0].name ];
			regs2.modValue(	
					"(" + regs2.getValue( ) + ")"
					+ "*" + var.getName( )
					);
			var.modType( LONG );
			
		}
break;
case 137:
#line 852 "start.y"
{

			SymInfo &var = curActRecord -> at( yyvsp[-1].num );
			SymInfo &regs = curSymTab[ yyvsp[0].name ];
			regs.modValue( "(" + regs.getValue( ) + ")"+ "*" 
					+ var.getName( )
				     );
			var.modType( LONG );
		}
break;
case 139:
#line 862 "start.y"
{

			SymInfo &array = curSymTab[ yyvsp[-1].name ];
			SymInfo &regs = curSymTab[ tempArray.regs ];
			SymInfo &destRegs = curSymTab[ yyvsp[0].name ];
			
			array.makArray( );
			array.modType( LONG );
			
			const string &iForm = indexForm( array, regs );
						
			destRegs.modValue( "(" + destRegs.getValue( ) + ")"
						+ "*" + iForm );
		}
break;
case 141:
#line 877 "start.y"
{
		
			SymInfo &regs = curSymTab[ yyvsp[0].name ];	
			regs.modValue( "(" + regs.getValue( ) + ")"
					+ "*" + itoa( yyvsp[-1].num )
				     );
		}
break;
case 143:
#line 885 "start.y"
{
		
			SymInfo &eax = curSymTab[ EAX ];
			SymInfo &var = curSymTab[ yyvsp[0].name ];	
			eax.modValue( eax.getValue( ) + "*" + var.getName( ) );
			var.modType( CHAR );
			
		}
break;
case 145:
#line 894 "start.y"
{
		
			SymInfo &eax = curSymTab[ EAX ];
			SymInfo &array = curSymTab[ tempArray.name ];	
			SymInfo &regs = curSymTab[ tempArray.regs ];
			eax.modValue( eax.getValue( ) + "*"
						+ indexForm( array, regs ) );

			array.makArray( );
			array.modType( CHAR );
			
		}
break;
case 147:
#line 906 "start.y"
{
		
			SymInfo &eax = curSymTab[ EAX ];
			SymInfo &var = curActRecord -> at( yyvsp[0].num );
			eax.modValue( eax.getValue( ) + "*" + var.getName( ) );
			var.modType( CHAR );
		}
break;
case 149:
#line 914 "start.y"
{
			curSymTab[ yyvsp[0].name ] = curSymTab[ yyvsp[-1].name ];
		}
break;
case 151:
#line 918 "start.y"
{
		
			SymInfo &regs = curSymTab[ yyvsp[-1].name ];
			SymInfo &var = curSymTab[ yyvsp[0].name ];	
			curInstr = var.getName( ) + "= " + regs.getValue( );
			curBlock -> insert( curInstr + ";" ); 
			var.modType( yyvsp[-2].type );
			regs.modType( var.getType( ) );

		}
break;
case 153:
#line 929 "start.y"
{
		
			SymInfo &regs = curSymTab[ yyvsp[-1].name ];
			SymInfo &var = curActRecord -> at( yyvsp[0].num );
			var.reference = regs.reference;
			curInstr = var.getName( ) + "=" + regs.getValue( );
			curBlock -> insert( curInstr + ";" );
			var.modType( yyvsp[-2].type );
			regs.modType( var.getType( ) );
		}
break;
case 155:
#line 940 "start.y"
{

			SymInfo &regs = curSymTab[ yyvsp[-1].name ];
			SymInfo *&ref = curSymTab[ yyvsp[0].name ].reference;
			
			curInstr = "*(" + ref -> getName( ) + ")"
					+ "= " + regs.getValue( );
			curBlock -> insert( curInstr + ";" );
			ref -> modType( yyvsp[-2].type );
			regs.modType( ref -> getType( ) );

		}
break;
case 157:
#line 953 "start.y"
{ 

			SymInfo &regs = curSymTab[ yyvsp[0].name ];
			SymInfo &var = curSymTab[ yyvsp[-1].name ];	
			regs.modValue( var.getName( ) );
			var.modType( yyvsp[-2].type ); 
			regs.modType( var.getType( ) );
			regs.reference = &var;
		}
break;
case 159:
#line 963 "start.y"
{
		
			SymInfo &regs = curSymTab[ yyvsp[0].name ];
			SymInfo &var = curActRecord -> at( yyvsp[-1].num );
			regs.reference = var.reference;
			regs.modValue( var.getName( ) );
			var.modType( yyvsp[-2].type );
			regs.modType( var.getType( ) );
		}
break;
case 161:
#line 973 "start.y"
{
			SymInfo &regs = curSymTab[ yyvsp[0].name ];
			regs.modValue( itoa( yyvsp[-1].num ) );
			regs.modType( INT );
			
		}
break;
case 163:
#line 980 "start.y"
{ 
		
			SymInfo &var = curSymTab[ yyvsp[0].name ];	
			curInstr = var.getName( ) + "= " + itoa( yyvsp[-1].num );
			curBlock -> insert( curInstr + ";" ); 
			var.modType( yyvsp[-2].type );
				  
		}
break;
case 165:
#line 989 "start.y"
{

			  SymInfo &var = curActRecord -> at( yyvsp[0].num );
			  curInstr = var.getName( ) + "= " + itoa( yyvsp[-1].num );
			  curBlock -> insert( curInstr + ";" ); 
			  var.modType( yyvsp[-2].type );
		}
break;
case 167:
#line 997 "start.y"
{

			SymInfo &array = curSymTab[ yyvsp[0].name ];
			SymInfo &regs = curSymTab[ tempArray.regs ];
			array.makArray( );
			array.fixType( yyvsp[-2].type );

			curInstr = indexForm( array, regs ) + "= " + itoa( yyvsp[-1].num );
			curBlock -> insert( curInstr + ";" );
		}
break;
case 169:
#line 1008 "start.y"
{

			SymInfo &srcRegs = curSymTab[ yyvsp[-1].name ];
			SymInfo &array = curSymTab[ yyvsp[0].name ];
			SymInfo &regs = curSymTab[ tempArray.regs ];

			array.makArray( );
			array.fixType( yyvsp[-2].type );

			curInstr = indexForm( array, regs )
					+ "= " + srcRegs.getValue( );

			curBlock -> insert( curInstr + ";" );
		}
break;
case 171:
#line 1023 "start.y"
{

			SymInfo &array = curSymTab[ yyvsp[-1].name ];
			SymInfo &regs = curSymTab[ tempArray.regs ];
			SymInfo &regs2 = curSymTab[ yyvsp[0].name ];
			
			array.makArray( );
			array.modType( yyvsp[-2].type );
			regs2.modValue( indexForm( array, regs ) );

		}
break;
case 173:
#line 1035 "start.y"
{

			  SymInfo &var = curActRecord -> at( yyvsp[0].num );
			  curInstr = var.getName( ) + "= " 
						+ convert2Float( htoi( yyvsp[-1].name ) );
			  curBlock -> insert( curInstr + ";" ); 
			  var.fixType( FLOAT );
		}
break;
case 175:
#line 1046 "start.y"
{
			SymInfo &regs2 = curSymTab[ yyvsp[0].name ];
			regs2 = curSymTab[ yyvsp[-1].name ];
			regs2.modValue( regs2.getValue( ) );
		}
break;
case 177:
#line 1053 "start.y"
{
			SymInfo &var = curSymTab[ yyvsp[-1].name ];
			curSymTab[ yyvsp[0].name ].modValue( var.getName( ) );
			var.fixType( CHAR );
			if ( yyvsp[-2].type == UNSIGNED )
				var.makUnsigned( );
		}
break;
case 179:
#line 1062 "start.y"
{
			SymInfo &var = curActRecord -> at( yyvsp[-1].num );
			curSymTab[ yyvsp[0].name ].modValue( var.getName( ) );
			var.fixType( CHAR );
			if ( yyvsp[-2].type == UNSIGNED )
				var.makUnsigned( );
		}
break;
case 181:
#line 1072 "start.y"
{
			SymInfo &regs2 = curSymTab[ yyvsp[0].name ];
			regs2 = curSymTab[ yyvsp[-1].name ];
			regs2.modValue( regs2.getValue( ) );
		}
break;
case 183:
#line 1079 "start.y"
{

			SymInfo &var = curSymTab[ yyvsp[-1].name ];
			curSymTab[ yyvsp[0].name ].modValue( var.getName( ) );
			var.fixType( SINT );
			if ( yyvsp[-2].type == UNSIGNED )
				var.makUnsigned( );
		}
break;
case 185:
#line 1088 "start.y"
{

			SymInfo &var = curActRecord -> at( yyvsp[-1].num );
			curSymTab[ yyvsp[0].name ].modValue( var.getName( ) );
			var.fixType( SINT );
			if ( yyvsp[-2].type == UNSIGNED )
				var.makUnsigned( );
		}
break;
case 187:
#line 1098 "start.y"
{

			SymInfo &regs2 = curSymTab[ yyvsp[0].name ];
			regs2 = curSymTab[ yyvsp[-1].name ];
			regs2.modValue( regs2.getValue( ) );
		}
break;
case 189:
#line 1106 "start.y"
{
		
			SymInfo &var = curSymTab[ yyvsp[-1].name ];	
			curSymTab[ yyvsp[0].name ].modValue( var.getName( ) );
			var.fixType( CHAR );
			if ( yyvsp[-2].type == UNSIGNED )
				var.makUnsigned( );
		}
break;
case 191:
#line 1116 "start.y"
{
		
			SymInfo &var = curActRecord -> at( yyvsp[-1].num );
			curSymTab[ yyvsp[0].name ].modValue( var.getName( ) );
			var.fixType( CHAR );
			if ( yyvsp[-2].type == UNSIGNED )
				var.makUnsigned( );
			
		}
break;
case 193:
#line 1128 "start.y"
{ 
			SymInfo &regs1 = curSymTab[ yyvsp[-1].name ];
			SymInfo &regs2 = curSymTab[ yyvsp[0].name ];
			cmpOp1 = regs1.getValue( );
			cmpOp2 = regs2.getValue( );
			regs1.modType( yyvsp[-2].type );
			regs2.modType( yyvsp[-2].type );
		}
break;
case 195:
#line 1137 "start.y"
{
			SymInfo &regs = curSymTab[ yyvsp[-1].name ];
			SymInfo &var = curSymTab[ yyvsp[0].name ];	
			cmpOp1 = var.getName( );
			cmpOp2 = regs.getValue( );
			var.modType( yyvsp[-2].type );
			regs.modType( yyvsp[-2].type );
		}
break;
case 197:
#line 1146 "start.y"
{
			SymInfo &regs = curSymTab[ yyvsp[-1].name ];
			SymInfo &var = curActRecord -> at( yyvsp[0].num );
			cmpOp1 = var.getName( );
			cmpOp2 = regs.getValue( );
			var.modType( yyvsp[-2].type );
			regs.modType( yyvsp[-2].type );
		}
break;
case 199:
#line 1155 "start.y"
{

			SymInfo &regs = curSymTab[ yyvsp[-1].name ];
			SymInfo &array = curSymTab[ tempArray.name ];
			SymInfo &regs1 = curSymTab[ tempArray.regs ];
			
			cmpOp1 = indexForm( array, regs1 );
			cmpOp2 = regs.getValue( );
			
			array.makArray( );
			array.modType( yyvsp[-2].type );
			regs.modType( yyvsp[-2].type );
		}
break;
case 201:
#line 1169 "start.y"
{
			SymInfo &regs = curSymTab[ yyvsp[0].name ];
			SymInfo &var = curSymTab[ yyvsp[-1].name ];
			cmpOp1 = regs.getValue( );
			cmpOp2 = var.getName( );
			var.modType( yyvsp[-2].type );
			regs.modType( yyvsp[-2].type );
		}
break;
case 203:
#line 1178 "start.y"
{
			SymInfo &regs = curSymTab[ yyvsp[0].name ];
			SymInfo &var = curActRecord -> at( yyvsp[-1].num );
			cmpOp1 = regs.getValue( );
			cmpOp2 = var.getName( );	
			var.modType( yyvsp[-2].type );
			regs.modType( yyvsp[-2].type );
		}
break;
case 205:
#line 1187 "start.y"
{

			SymInfo &regs = curSymTab[ yyvsp[0].name ];
			SymInfo &array = curSymTab[ tempArray.name ];
			SymInfo &regs1 = curSymTab[ tempArray.regs ];
			
			cmpOp1 = regs.getValue( );
			cmpOp2 = indexForm( array, regs1 );
			array.makArray( );
			array.modType( yyvsp[-2].type );
		}
break;
case 207:
#line 1199 "start.y"
{
			SymInfo &var = curSymTab[ yyvsp[0].name ];
			cmpOp1 = var.getName( );
			cmpOp2 = itoa( yyvsp[-1].num );
			var.modType( yyvsp[-2].type );
		}
break;
case 209:
#line 1206 "start.y"
{
		
			SymInfo &var = curActRecord -> at( yyvsp[0].num );
			cmpOp1 = var.getName( );
			cmpOp2 = itoa( yyvsp[-1].num );
			var.modType( yyvsp[-2].type );
		}
break;
case 211:
#line 1214 "start.y"
{

			SymInfo &array = curSymTab[ tempArray.name ];
			SymInfo &regs = curSymTab[ tempArray.regs ];
			
			cmpOp1 = indexForm( array, regs );
			cmpOp2 = itoa( yyvsp[-1].num );
			array.makArray( );
			array.modType( yyvsp[-2].type );
		}
break;
case 213:
#line 1225 "start.y"
{
			SymInfo &var = curSymTab[ yyvsp[-1].name ];
			cmpOp1 = itoa( yyvsp[0].num );
			cmpOp2 = var.getName( );
			var.modType( yyvsp[-2].type );
		}
break;
case 215:
#line 1232 "start.y"
{
		
			SymInfo &var = curActRecord -> at( yyvsp[-1].num );
			cmpOp1 = itoa( yyvsp[0].num );
			cmpOp2 = var.getName( );
			var.modType( yyvsp[-2].type );
		}
break;
case 217:
#line 1240 "start.y"
{

			SymInfo &array = curSymTab[ tempArray.name ];
			SymInfo &regs = curSymTab[ tempArray.regs ];
			
			cmpOp1 = itoa( yyvsp[0].num );
			cmpOp2 = indexForm( array, regs );
			array.makArray( );
			array.modType( yyvsp[-2].type );
		}
break;
case 219:
#line 1251 "start.y"
{
			cmpOp1 = curSymTab[ yyvsp[0].name ].getValue( );
			cmpOp2 = itoa( yyvsp[-1].num );
		 }
break;
case 221:
#line 1256 "start.y"
{
			cmpOp1 = itoa( yyvsp[0].num );
			cmpOp2 = curSymTab[ yyvsp[-1].name ].getValue( );
		}
break;
case 223:
#line 1261 "start.y"
{
				
			SymInfo &regs1 = curSymTab[ yyvsp[-1].name ];
			SymInfo &regs2 = curSymTab[ yyvsp[0].name ];
			if ( string( yyvsp[-1].name ) == yyvsp[0].name )
				cmpOp1 = regs1.getValue( );
			else {
				cmpOp1 = "((" + regs1.getValue( ) + ")&" +
					regs2.getValue( ) + ")" ;
			}
			cmpOp2 = "0";
			regs1.modType( yyvsp[-2].type );
			regs2.modType( yyvsp[-2].type );
			
		}
break;
case 225:
#line 1277 "start.y"
{
			
			cmpOp1 = "(" + itoa( yyvsp[-1].num ) + "&" 
					+ curSymTab[ yyvsp[0].name ].getValue( ) + ")";
			cmpOp2 = "0";
		}
break;
case 227:
#line 1284 "start.y"
{
			
			SymInfo &regs = curSymTab[ yyvsp[0].name ];
			SymInfo &var = curSymTab[ yyvsp[-1].name ];
			cmpOp1 += "(" + var.getName( ) + "&" 
					+ regs.getValue( ) + ")";
			cmpOp2 = "0";
			var.modType( yyvsp[-2].type );
			regs.modType( yyvsp[-2].type );
		}
break;
case 229:
#line 1295 "start.y"
{
			SymInfo &regs = curSymTab[ yyvsp[0].name ];
			SymInfo &var = curActRecord -> at( yyvsp[-1].num );
			cmpOp1 += "(" + var.getName( ) 
					+ "&" + regs.getValue( ) + ")";
			cmpOp2 = "0";
			var.modType( yyvsp[-2].type );
			regs.modType( yyvsp[-2].type );
		}
break;
case 231:
#line 1305 "start.y"
{

			SymInfo &array = curSymTab[ tempArray.name ];
			SymInfo &regs = curSymTab[ tempArray.regs ];
			SymInfo &destRegs = curSymTab[ yyvsp[0].name ];

			cmpOp1 += "(" + indexForm( array, regs )
					+ "&" + destRegs.getValue( ) + ")";
			cmpOp2 = "0";
			array.modType( yyvsp[-2].type );
			array.makArray( );
			destRegs.modType( yyvsp[-2].type );
		}
break;
case 233:
#line 1319 "start.y"
{
			
			SymInfo &var = curSymTab[ yyvsp[-1].name ];
			cmpOp1 = "(" + var.getName( ) + "&" + itoa( yyvsp[0].num ) + ")";
			cmpOp2 = "0";
			var.modType( yyvsp[-2].type );
		}
break;
case 235:
#line 1327 "start.y"
{
			
			cmpOp1 = "(" + curActRecord -> at( yyvsp[-1].num ).getName( ) 
					+ "&" + itoa( yyvsp[0].num ) + ")";
			cmpOp2 = "0";
		}
break;
case 237:
#line 1334 "start.y"
{}
break;
case 239:
#line 1336 "start.y"
{}
break;
case 241:
#line 1338 "start.y"
{}
break;
case 243:
#line 1340 "start.y"
{}
break;
case 245:
#line 1342 "start.y"
{/*OPCODEL = SUBL or ADDL or ANDL*/
			
			if ( string( yyvsp[-2].name ) == "-" )
				if ( seenOnce == false )
					seenOnce = true;
		}
break;
case 249:
#line 1358 "start.y"
{
                        FloatType a = floatStack.pop();
                        curInstr = "(" + a + "="
                                   + a + ">" + "0" + "?" + a + ":"
                                   + "-" + a + ")";
                        floatStack.push( curInstr );

		}
break;
case 251:
#line 1368 "start.y"
{

			floatStack.push( "-(" + floatStack.pop( ) + ")" );
		}
break;
case 253:
#line 1373 "start.y"
{
			floatStack.swap( 1 );
		}
break;
case 255:
#line 1377 "start.y"
{
			floatStack.swap( yyvsp[0].num );
		}
break;
case 257:
#line 1381 "start.y"
{
			floatStack.push( "1" );
		}
break;
case 259:
#line 1385 "start.y"
{
			floatStack.push( "0" );
		}
break;
case 261:
#line 1389 "start.y"
{
			SymInfo &var = curSymTab[ yyvsp[0].name ];
			floatStack.push( var.getName( ) );
			var.modType( yyvsp[-1].type );
		}
break;
case 263:
#line 1395 "start.y"
{
			SymInfo &var = curActRecord -> at( yyvsp[0].num );
			floatStack.push( var.getName( ) );
			var.modType( yyvsp[-1].type );
		}
break;
case 265:
#line 1401 "start.y"
{
			floatStack.pushFrom( yyvsp[0].num );
		}
break;
case 267:
#line 1405 "start.y"
{
			floatStack.push( curSymTab[ itoa( yyvsp[0].num ) ].getValue( ) );
		}
break;
case 269:
#line 1409 "start.y"
{

			SymInfo &var = curSymTab[ yyvsp[0].name ];
			floatStack.push( var.getName( ) );
			var.modType( yyvsp[-1].type );
		}
break;
case 271:
#line 1416 "start.y"
{

			SymInfo &var = ( *curActRecord )[ yyvsp[0].num ];
			floatStack.push( var.getName( ) );
			var.modType( yyvsp[-1].type );
		}
break;
case 273:
#line 1425 "start.y"
{
				
			const string &t = floatStack.seetop( );
			floatStack.storeAt(yyvsp[0].num, t);
			floatStack.pop( );
				
		}
break;
case 275:
#line 1433 "start.y"
{
		
			SymInfo &var = curSymTab[ yyvsp[0].name ];
			curInstr = var.getName( ) + "=" + floatStack.seetop( );
			floatStack.at( 0 ) = var.getName( );
			curBlock -> insert( curInstr + ";" );
			var.modType( yyvsp[-1].type );
				
		}
break;
case 277:
#line 1443 "start.y"
{
		
			SymInfo &var = curActRecord -> at( yyvsp[0].num );
			curInstr = var.getName( ) + "=" + floatStack.seetop( );
			floatStack.at( 0 ) = var.getName( );
			curBlock -> insert( curInstr + ";" );
			var.modType( yyvsp[-1].type );
			
		}
break;
case 279:
#line 1454 "start.y"
{

			const string &t = floatStack.seetop( );
			floatStack.storeAt( yyvsp[0].num, t );
			floatStack.pop( );
			
		}
break;
case 281:
#line 1462 "start.y"
{

			SymInfo &var = curSymTab[ yyvsp[0].name ];
			curInstr = var.getName( ) + "=" + floatStack.pop( );
			curBlock -> insert( curInstr + ";" );
			var.modType( yyvsp[-1].type );
				
		}
break;
case 283:
#line 1471 "start.y"
{

			SymInfo &var = curActRecord -> at( yyvsp[0].num );
			curInstr = var.getName( ) + "=" + floatStack.pop( );
			curBlock -> insert( curInstr + ";" );
			var.modType( yyvsp[-1].type );
				
		}
break;
case 285:
#line 1482 "start.y"
{
			SymInfo &var = curSymTab[ yyvsp[0].name ];

			curInstr = var.getName( ) + "=" + 
				 "(" + floatStack.seetop( ) + ")";
			curBlock -> insert( curInstr + ";" );
			var.modType( yyvsp[-1].type );
		}
break;
case 287:
#line 1491 "start.y"
{

			SymInfo &var = ( *curActRecord )[ yyvsp[0].num ];

			curInstr = var.getName( ) + "="
					+ "(" + floatStack.seetop( ) + ")";
			curBlock -> insert( curInstr + ";" );
			var.modType( yyvsp[-1].type );
		}
break;
case 289:
#line 1502 "start.y"
{
			SymInfo &var = curSymTab[ yyvsp[0].name ];	

			curInstr = var.getName( ) + "=" 
						+ "(" + floatStack.pop( ) + ")";
			curBlock -> insert( curInstr + ";" );
			var.modType( yyvsp[-1].type );
		}
break;
case 291:
#line 1511 "start.y"
{
		
			SymInfo &var = curActRecord -> at( yyvsp[0].num );

			curInstr = var.getName( ) + "=" 
						+ "(" + floatStack.pop( ) + ")";
			curBlock -> insert( curInstr + ";" );
			var.modType( yyvsp[-1].type );
		}
break;
case 293:
#line 1528 "start.y"
{
			floatStack.at( 0 ) = "(" + floatStack.at ( 0 )
						+ "+" 
						+ floatStack.at( yyvsp[0].num ) + ")" ;

		}
break;
case 295:
#line 1539 "start.y"
{
			
			floatStack.at( 0 ) = "(" + floatStack.at( yyvsp[-1].num )
					  + "+" +
					  floatStack.at( yyvsp[0].num ) + ")" ;
		}
break;
case 297:
#line 1546 "start.y"
{
		
			SymInfo &var = curSymTab[ yyvsp[0].name ];	
			floatStack.at( 0 ) = "(" + floatStack.at( 0 )
				 	+ "+" 
					+ var.getName( ) + ")" ;
			var.modType( yyvsp[-1].type );
		}
break;
case 299:
#line 1555 "start.y"
{
		
			SymInfo &var = ( *curActRecord )[ yyvsp[0].num ];
			floatStack.at( 0 ) = "(" + floatStack.at( 0 )
				 	+ "+" 
					+ var.getName( ) + ")" ;

			var.modType( yyvsp[-1].type );

		}
break;
case 301:
#line 1571 "start.y"
{
			floatStack.push( 
				"(" + floatStack.pop( ) 
					+ "+" + 
				floatStack.pop( ) + ")"	
				);
		}
break;
case 303:
#line 1580 "start.y"
{
		
			SymInfo &var = curSymTab[ yyvsp[0].name ];
			
			floatStack.at( 0 ) = "(" + floatStack.at( 0 ) 
						+ "+" +
						var.getName( ) + ")" ;
			var.modType( yyvsp[-1].type );
		}
break;
case 305:
#line 1590 "start.y"
{
		
			SymInfo &var = ( *curActRecord )[ yyvsp[0].num ];
			
			floatStack.at( 0 ) = "(" + floatStack.at( 0 ) 
						+ "+" +	var.getName( ) + ")" ;
			var.modType( yyvsp[-1].type );
		}
break;
case 307:
#line 1604 "start.y"
{
		
			floatStack.at( 0 ) = "(" + floatStack.at ( 0 )
						+ "-" 
						+ floatStack.at( yyvsp[0].num ) + ")" ;

		}
break;
case 309:
#line 1615 "start.y"
{
			FloatType op1, op2;
			if ( yyvsp[0].num != 0 ) 
				op2 = floatStack.at( yyvsp[0].num );
			else if ( yyvsp[-1].num != 0 )
				op2 = floatStack.at( yyvsp[-1].num );
			else
				op2 = floatStack.at( 0 );
			op1 = floatStack.at( 0 );
			floatStack.at( 0 ) = "(" + op2 + "-" + op1 + ")" ;

		}
break;
case 311:
#line 1628 "start.y"
{
			
			SymInfo &var = curSymTab[ yyvsp[0].name ];
			floatStack.at( 0 ) = "(" + floatStack.at( 0 )
				 	+ "-" 
					+ var.getName( ) + ")" ;
			var.modType( yyvsp[-1].type );

		}
break;
case 313:
#line 1638 "start.y"
{
			
			SymInfo &var = ( *curActRecord )[ yyvsp[0].num ];
			floatStack.at( 0 ) = "(" + floatStack.at( 0 )
				 	+ "-" + var.getName( ) + ")" ;

			var.modType( yyvsp[-1].type );

		}
break;
case 315:
#line 1654 "start.y"
{
			
			FloatType op1, op2;
			if ( yyvsp[-1].num != 0 ) 
				op2 = floatStack.at( yyvsp[-1].num );
			else 
				op2 = floatStack.at( yyvsp[0].num );
			op1 = floatStack.at( 0 );
			floatStack.push( "(" + op1 + "-" + op2 + ")" );
		}
break;
case 317:
#line 1671 "start.y"
{
		
			floatStack.at( 0 ) = "(" + floatStack.at ( yyvsp[0].num )
						+ "-" 
						+ floatStack.at( 0 ) + ")" ;

		}
break;
case 319:
#line 1680 "start.y"
{
		
			SymInfo &var = curSymTab[ yyvsp[0].name ];
			floatStack.at( 0 ) = "(" + var.getName( )
				 	+ "-" 
					+ floatStack.at( 0 ) + ")" ;
			var.modType( yyvsp[-1].type );

		}
break;
case 321:
#line 1690 "start.y"
{
		
			SymInfo &var = curActRecord -> at( yyvsp[0].num );
			floatStack.at( 0 ) = "(" + var.getName( ) + "-" 
					+ floatStack.at( 0 ) + ")" ;

			var.modType( yyvsp[-1].type );

		}
break;
case 323:
#line 1701 "start.y"
{
			
			FloatType op1, op2;
			if ( yyvsp[-1].num == 0 ) 
				op2 = floatStack.at( yyvsp[0].num );
			else 
				op2 = floatStack.at( yyvsp[-1].num );
			op1 = floatStack.at( 0 );

			floatStack.pop( );
			floatStack.pop( );

			floatStack.push( "(" + op2 + "-" + op1 + ")" );
		}
break;
case 325:
#line 1719 "start.y"
{
		
			SymInfo &var = curSymTab[ yyvsp[0].name ];
			floatStack.at( 0 ) = "(" + floatStack.at( 0 ) +
						"*" + var.getName( ) + ")" ;
			var.modType( yyvsp[-1].type );
				
		}
break;
case 327:
#line 1728 "start.y"
{
		
			SymInfo &var = ( *curActRecord )[ yyvsp[0].num ];
			floatStack.at( 0 ) = "(" + floatStack.at( 0 ) +
						"*" + var.getName( ) + ")" ;
			var.modType( yyvsp[-1].type );
				
		}
break;
case 329:
#line 1737 "start.y"
{
			floatStack.at( 0 ) = 
				"(" + floatStack.at( 0 ) +
						"*" + floatStack.at( yyvsp[0].num ) + ")";
		}
break;
case 331:
#line 1743 "start.y"
{
			FloatType op1, op2;
			if ( yyvsp[-1].num != 0 )
				op2 = floatStack.at( yyvsp[-1].num );
			else
				op2 = floatStack.at( yyvsp[0].num );
			op1 = floatStack.at( 0 );

			floatStack.at( 0 ) = "(" + op1 + "*" + op2 + ")" ;
		}
break;
case 333:
#line 1755 "start.y"
{
			FloatType op1, op2;
			if ( yyvsp[-1].num != 0 )
				op2 = floatStack.at( yyvsp[-1].num );
			else
				op2 = floatStack.at( yyvsp[0].num );
			op1 = floatStack.at( 0 );

			floatStack.pop( );
			floatStack.pop( );
			floatStack.push( "(" + op1 + "*" + op2 + ")" );
		}
break;
case 335:
#line 1770 "start.y"
{
			floatStack.at( 0 ) = 
				"(" + floatStack.at( 0 ) +
						"/" + floatStack.at( yyvsp[0].num ) + ")";
		}
break;
case 337:
#line 1776 "start.y"
{
			FloatType op1, op2;
			if ( yyvsp[-1].num != 0 )
				op2 = floatStack.at( yyvsp[-1].num );
			else
				op2 = floatStack.at( yyvsp[0].num );
			op1 = floatStack.at( 0 );

			floatStack.at( 0 ) = "(" + op1 + "/" + op2 + ")";
		}
break;
case 339:
#line 1787 "start.y"
{
			SymInfo &var = curSymTab[ yyvsp[0].name ];
			floatStack.at( 0 ) = "(" + floatStack.at( 0 ) +
						"/" + var.getName( ) + ")" ;
			var.modType( FLOAT );
		}
break;
case 341:
#line 1794 "start.y"
{
			SymInfo &var = ( *curActRecord )[ yyvsp[0].num ];
			floatStack.at( 0 ) = "(" + floatStack.at( 0 ) +
						"/" + var.getName( ) + ")" ;
			var.modType( FLOAT );
		}
break;
case 343:
#line 1802 "start.y"
{

			SymInfo &var = curSymTab[ yyvsp[0].name ];
			floatStack.at( 0 ) = "(" + var.getName( ) +
						"/" + floatStack.at( 0 ) + ")" ;
			var.modType( FLOAT );
		
		}
break;
case 345:
#line 1811 "start.y"
{

			SymInfo &var = ( *curActRecord )[ yyvsp[0].num ];
			floatStack.at( 0 ) = "(" + var.getName( ) +
						"/" + floatStack.at( 0 ) + ")" ;
		
		}
break;
case 347:
#line 1819 "start.y"
{

			floatStack.at( 0 ) = 
				"(" + floatStack.at( yyvsp[0].num ) +
						"/" + floatStack.at( 0 ) + ")";
		
		}
break;
case 349:
#line 1829 "start.y"
{

			FloatType op1, op2;
			if ( yyvsp[-1].num != 0 )
				op2 = floatStack.at( yyvsp[-1].num );
			else
				op2 = floatStack.at( yyvsp[0].num );
			op1 = floatStack.at( 0 );

			floatStack.pop( );
			floatStack.pop( );
			floatStack.push( "(" + op1 + "/" + op2 + ")" );

		}
break;
case 351:
#line 1846 "start.y"
{

			FloatType op1, op2;
			if ( yyvsp[-1].num != 0 )
				op2 = floatStack.at( yyvsp[-1].num );
			else
				op2 = floatStack.at( yyvsp[0].num );
			op1 = floatStack.at( 0 );

			floatStack.pop( );
			floatStack.pop( );
			floatStack.push( "(" + op2 + "/" + op1 + ")" );

		}
break;
case 353:
#line 1861 "start.y"
{
			cmpOp1 = floatStack.pop( );
			cmpOp2 = floatStack.pop( );
		}
break;
case 355:
#line 1872 "start.y"
{
			string op;
			if ( yyvsp[-1].num == 5 )
				op = "jl";
			else if ( yyvsp[-1].num == 69 )
				op = "jle";

			curBlock -> cmpOperator(  op );
			curBlock -> cmpOpFloat = true;
		}
break;
case 357:
#line 1885 "start.y"
{
			curBlock -> cmpOperator( "je" );
			curBlock -> cmpOpFloat = true;
		}
break;
case 359:
#line 1892 "start.y"
{
			curBlock -> cmpOperator( "jne" );
			curBlock -> cmpOpFloat = true;
		}
break;
case 364:
#line 1911 "start.y"
{
			if ( seenOnce )
				prototype.push( curSymTab[yyvsp[0].name] );
		}
break;
case 366:
#line 1916 "start.y"
{
			if ( seenOnce )
				prototype.push( curSymTab[ yyvsp[0].name ] );
		}
break;
case 368:
#line 1921 "start.y"
{
			if ( seenOnce ) {
				SymInfo var;
				var.modValue( "&" 
					+ curSymTab[ yyvsp[0].name ].getName( ) );
				prototype.push( var );
			}
		}
break;
case 370:
#line 1930 "start.y"
{
			if ( seenOnce )	{
				SymInfo &var = ( *curActRecord )[ yyvsp[0].num ];
				prototype.push( var );
				SymInfo &t = prototype.top();
				t.modName( var.getName( ) );
			}
		}
break;
case 372:
#line 1939 "start.y"
{
			if ( seenOnce )	{
				SymInfo temp( STRING, sizeof ( char * ), yyvsp[0].name );
				temp.makConst( );
				prototype.push( temp );
			}
		}
break;
case 374:
#line 1947 "start.y"
{
			if ( seenOnce )	{
				SymInfo temp( 
					LONG, sizeof ( long ), itoa( yyvsp[0].num ) 
					);
				prototype.push( temp );
			}
		}
break;
case 376:
#line 1959 "start.y"
{

			SymInfo &regs = prototype.top( );
			prototype.pop( );
			floatStack.push( regs.getValue( ) );
		}
break;
case 378:
#line 1968 "start.y"
{
			SymInfo &regs = curSymTab[ yyvsp[0].name ];
			SymInfo &p = curSymTab[ yyvsp[-1].name ];

			regs.modValue( "(" +  p.getValue( ) + itoa( yyvsp[-2].num ) + ")"
					);
		}
break;
case 380:
#line 1978 "start.y"
{
			string first = yyvsp[-1].name;
			string second = string( first.begin() + 4, first.end());
			first = string( first.begin( ), first.begin( ) + 4 );
			curSymTab[ yyvsp[0].name ].value = 
					"(" + curSymTab[ first ].value + ")" +
					"+" +
					"(" + curSymTab[ second ].value + ")";
		}
break;
case 382:
#line 1991 "start.y"
{
			SymInfo &regs = curSymTab[ yyvsp[0].name ];
			SymInfo &var = curActRecord -> at( yyvsp[-1].num );
			regs.reference = &var;
			regs.modValue( "&" + var.getName( ) );
		}
break;
case 384:
#line 1999 "start.y"
{
			SymInfo &regs = curSymTab[ yyvsp[0].name ];
			SymInfo &var = curSymTab[ yyvsp[-1].name ];
			regs.reference = &var;
			regs.modValue( "&" + var.getName( ) );
		}
break;
case 386:
#line 2006 "start.y"
{}
break;
case 388:
#line 2007 "start.y"
{}
break;
case 390:
#line 2010 "start.y"
{

			SymInfo temp;
			temp.modValue( floatStack.pop( ) );
			temp.modType( yyvsp[-1].type );
			prototype.push( temp );
		}
break;
case 392:
#line 2018 "start.y"
{
			string call = string( yyvsp[0].name ) + "(";
			ActRecord temp;
			int no = 8;
			while ( !prototype.empty( ) ) {
				++temp.maxPars;
call += prototype.top( ).getValue( ) + (prototype.size( ) > 1 ? "," : "");
				temp.insert( no, prototype.top( ) );
				prototype.pop( );
				no += 4;
			}
			curFuncTab.insert( yyvsp[0].name, temp );
			curSymTab[ EAX ].modValue( call + ")" );
/*
			SymInfo &eax = curSymTab[ EAX ];
			eax.modValue( call + ")" );
			eax.used = eax.defined = false;
*/
		}
break;
case 394:
#line 2042 "start.y"
{
			if ( !SAW_JUMP )
				curBlockTab.insert( curBlock );

			SymInfo &eax = curSymTab[ EAX ];
			curActRecord -> setRetValue( eax.getValue( ) );
			curActRecord -> setRetType( eax.getType( ) );

			if ( VERBOSE ) {
				verbose( "\tFunction takes " 
					+ itoa( curActRecord -> maxPars )
					+ " parameters" );
				verbose( "\tFinished Data Flow Analysis" );
			}
			return 1;
		}
break;
case 395:
#line 2061 "start.y"
{

		SymInfo &var = curActRecord -> at( yyvsp[0].num );
		curInstr = var.getName( ) + "=" 
					+ "(" + floatStack.pop( ) + ")";
		curBlock -> insert( curInstr + ";" );
		var.modType( yyvsp[-1].type );
	}
break;
case 396:
#line 2069 "start.y"
{

		SymInfo &var = curSymTab[ yyvsp[0].name ];
		curInstr = var.getName( ) + "=" + "(" + floatStack.pop( ) + ")";
		curBlock -> insert( curInstr + ";" );
		var.modType( yyvsp[-1].type );
	}
break;
case 397:
#line 2076 "start.y"
{

		SymInfo &var = curActRecord -> at( yyvsp[0].num );
		curInstr = var.getName( ) + "=" 
					+ "(" + floatStack.pop( ) + ")";
		curBlock -> insert( curInstr + ";" );
		var.modType( LONG );
	}
break;
#line 3681 "yacc.cpp"
    }
    yyssp -= yym;
    yystate = *yyssp;
    yyvsp -= yym;
    yym = yylhs[yyn];
    if (yystate == 0 && yym == 0)
    {
#if YYDEBUG
        if (yydebug)
            printf("%sdebug: after reduction, shifting from state 0 to\
 state %d\n", YYPREFIX, YYFINAL);
#endif
        yystate = YYFINAL;
        *++yyssp = YYFINAL;
        *++yyvsp = yyval;
        if (yychar < 0)
        {
            if ((yychar = yylex()) < 0) yychar = 0;
#if YYDEBUG
            if (yydebug)
            {
                yys = 0;
                if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
                if (!yys) yys = "illegal-symbol";
                printf("%sdebug: state %d, reading %d (%s)\n",
                        YYPREFIX, YYFINAL, yychar, yys);
            }
#endif
        }
        if (yychar == 0) goto yyaccept;
        goto yyloop;
    }
    if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
            yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
        yystate = yytable[yyn];
    else
        yystate = yydgoto[yym];
#if YYDEBUG
    if (yydebug)
        printf("%sdebug: after reduction, shifting from state %d \
to state %d\n", YYPREFIX, *yyssp, yystate);
#endif
    if (yyssp >= yysslim && yygrowstack())
    {
        goto yyoverflow;
    }
    *++yyssp = yystate;
    *++yyvsp = yyval;
    goto yyloop;
yyoverflow:
    yyerror("yacc stack overflow");
yyabort:
    return (1);
yyaccept:
    return (0);
}
